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?
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"
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
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 }
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 )