webentwicklung-frage-antwort-db.com.de

batch-Skript - Befehl für jede Datei im Verzeichnis ausführen

Ich muss einige xls-Dateien in xlsx-Dateien konvertieren. Ich kann eine xls-Datei erfolgreich in xlsx konvertieren, indem Sie diesen Befehl in cmd-Eingabeaufforderung (Windows) ausführen:

ssconvert inputFileName.xls outputFileName.xlsx

(ssconvert ist ein Befehlszeilenprogramm von Gnumeric, das zwischen verschiedenen Tabellenformaten konvertieren kann.)

Ich möchte eine Batchdatei schreiben, die für jede Datei in einem angegebenen Verzeichnis den Befehl ausführt, den ich oben geschrieben habe, wobei der aktuelle Dateiname sowohl für die Eingabe als auch für die Ausgabe verwendet wird.

Wenn ich zum Beispiel diesen Satz von Dateien habe:

c:\directory\file1.xls
c:\directory\file2.xls
c:\directory\file3.xls

die Ausgabe sollte sein

c:\directory\file1.xlsx
c:\directory\file2.xlsx
c:\directory\file3.xlsx

der Batch-Pseudo-Code sollte also ungefähr so ​​aussehen

directory = c:\directory\
for (fileName in directory)
    ssconvert fileName.xls fileName.xlsx

Kann mir jemand helfen?

28
BeNdErR
for /r %%v in (*.xls) do ssconvert "%%v" "%%vx"

ein paar haben die Leute mich gebeten, dies zu erklären, also:

Teil 1: for /r %%v in (*.xls)

Dieser Teil gibt ein Array von Dateien im aktuellen Verzeichnis mit der Erweiterung xls zurück. Der %% kann ein bisschen neugierig aussehen. Dies ist im Wesentlichen das spezielle %-Zeichen aus der Befehlszeile, das in% PATH% oder% TEMP% verwendet wird. Um es in einer Batch-Datei verwenden zu können, müssen wir es wie folgt entgehen lassen: %%PATH%% oder %%TEMP%%. In diesem Fall umgehen wir einfach die temporäre Variable v, die unser Array von Dateinamen enthält.

Wir verwenden den /r-Schalter, um rekursiv nach Dateien zu suchen. Daher werden alle übereinstimmenden Dateien in untergeordneten Ordnern ebenfalls gefunden.

Teil 2: do ssconvert "%%v" "%%vx"

Dieser zweite Teil wird einmal pro übereinstimmendem Dateinamen ausgeführt, dh, wenn die folgenden Dateien im aktuellen Ordner vorhanden waren:

c:\temp\mySheet.xls, c:\temp\mySheet_yesterday.xls, c:\temp\mySheet_20160902.xls 

die folgenden Befehle würden ausgeführt:

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"

38
paul

Eigentlich ist das seit Windows Vista ziemlich einfach. Microsoft fügte den Befehl FORFILES hinzu.

in Ihrem Fall

forfiles /p c:\directory /m *.xls /c "cmd /c ssconvert @file @fname.xlsx"

das einzig seltsame an diesem Befehl ist, dass Forfiles automatisch @ Anführungszeichen und @Fname anfügt. aber es sollte trotzdem funktionieren

21
weberik

sie können so etwas ausführen (fügen Sie den Code unten in eine .bat ein oder wenn Sie möchten, dass er interaktiv ausgeführt wird, ersetzen Sie %% durch %:

for %%i in (c:\directory\*.xls) do ssconvert %%i %%i.xlsx

Wenn Sie Powershell ausführen können, wird es Folgendes sein:

Get-ChildItem -Path c:\directory -filter *.xls | foreach {ssconvert $($_.FullName) $($_.baseName).xlsx }
9
Loïc MICHEL

Auf ähnliche Weise kompiliere ich alle c-Dateien in einem Verzeichnis. 
für das Durchlaufen von Dateien in einem anderen Verzeichnis versuchen Sie dies. 

set codedirectory=C:\Users\code
for /r  %codedirectory% %%i in (*.c) do 
( some GCC commands )
0
Rishikesh Ayre