J'ai besoin de convertir des fichiers xls en fichiers xlsx. Je peux convertir avec succès un fichier xls en xlsx en exécutant cette commande dans l'invite cmd (windows):
ssconvert inputFileName.xls outputFileName.xlsx
(ssconvert est un utilitaire de ligne de commande de Gnumeric pouvant convertir des formats de fichier de feuille de calcul différents)
Je voudrais écrire un fichier de commandes qui FOR EACH dans un répertoire spécifié exécute la commande que j'ai écrite ci-dessus, en utilisant le nom du fichier actuel à la fois pour l'entrée et pour le nom du fichier de sortie.
Par exemple, si j'ai cet ensemble de fichiers:
c:\directory\file1.xls
c:\directory\file2.xls
c:\directory\file3.xls
la sortie devrait être
c:\directory\file1.xlsx
c:\directory\file2.xlsx
c:\directory\file3.xlsx
donc le pseudo-code de lot devrait être quelque chose comme
directory = c:\directory\
for (fileName in directory)
ssconvert fileName.xls fileName.xlsx
Quelqu'un peut-il m'aider?
for /r %%v in (*.xls) do ssconvert "%%v" "%%vx"
un couple a des gens m'ont demandé d'expliquer cela, alors:
Partie 1: for /r %%v in (*.xls)
Cette partie renvoie un tableau de fichiers dans le répertoire en cours ayant l'extension xls
. Le %%
peut paraître un peu curieux. Il s’agit essentiellement du caractère %
spécial de la ligne de commande, tel qu’il est utilisé dans% PATH% ou% TEMP%. Pour l'utiliser dans un fichier batch, nous devons l'échapper comme suit: %%PATH%%
ou %%TEMP%%
. Dans ce cas, nous échappons simplement à la variable temporaire v
, qui contiendra notre tableau de noms de fichiers.
Nous utilisons le commutateur /r
pour rechercher des fichiers de manière récursive. Ainsi, tous les fichiers correspondants des dossiers enfants seront également localisés.
Partie 2: do ssconvert "%%v" "%%vx"
Cette seconde partie est ce qui sera exécuté une fois par nom de fichier correspondant, donc si les fichiers suivants étaient présents dans le dossier actuel:
c:\temp\mySheet.xls,
c:\temp\mySheet_yesterday.xls,
c:\temp\mySheet_20160902.xls
les commandes suivantes seraient exécutées:
ssconvert "c:\temp\mySheet.xls" "c:\temp\mySheet.xlsx"
ssconvert "c:\temp\mySheet_yesterday.xls" "c:\temp\mySheet_yesterday.xlsx"
ssconvert "c:\temp\mySheet_20160902.xls" "c:\temp\mySheet_20160902.xlsx"
En fait, c'est assez facile depuis Windows Vista. Microsoft a ajouté la commande FORFILES
dans ton cas
forfiles /p c:\directory /m *.xls /c "cmd /c ssconvert @file @fname.xlsx"
la seule chose étrange avec cette commande est que forfiles ajoute automatiquement des guillemets autour de @file et @fname. mais ça devrait marcher quand même
vous pouvez exécuter quelque chose comme ceci (collez le code ci-dessous dans un fichier .bat, ou si vous voulez qu'il s'exécute de manière interractive, remplacez le %%
par %
:
for %%i in (c:\directory\*.xls) do ssconvert %%i %%i.xlsx
Si vous pouvez exécuter PowerShell ce sera:
Get-ChildItem -Path c:\directory -filter *.xls | foreach {ssconvert $($_.FullName) $($_.baseName).xlsx }
Je fais la même chose pour compiler tous les fichiers c dans un répertoire.
pour itérer des fichiers dans un répertoire différent, essayez ceci.
set codedirectory=C:\Users\code
for /r %codedirectory% %%i in (*.c) do
( some GCC commands )