Ich habe einen Ordnerbaum wie diesen (es ist nur ein Beispiel, er wird in meinem realen Fall tiefer gehen):
C:\test
|
+---folder1
| foo bar.txt
| foobar.txt
|
+---folder2
| foo bar.txt
| foobar.txt
|
\---folder3
foo bar.txt
foobar.txt
Meine Dateien haben ein oder mehrere Leerzeichen im Namen und ich muss einen Befehl für sie ausführen, daher interessiere ich mich für foo bar.txt, aber nicht für foobar.txt.
Ich habe versucht (in einer Batch-Datei):
for /r test %%f in (foo bar.txt) do if exist %%f echo %%f
wo der Befehl ist der einfache echo
.
Es funktioniert nicht, weil der Speicherplatz übersprungen wird und ich keine Ausgabe erhalte.
Das funktioniert, aber es ist nicht das, was ich brauche:
for /r test %%f in (foobar.txt) do if exist %%f echo %%f
Es druckt:
C:\test\folder1\foobar.txt
C:\test\folder2\foobar.txt
C:\test\folder3\foobar.txt
Ich habe versucht, das Anführungszeichen (") zu verwenden, aber es funktioniert nicht:
for /r test %%f in ("foo bar.txt") do if exist %%f echo %%f
Es funktioniert nicht, da das Anführungszeichen noch in der Ausgabe enthalten ist:
C:\test\folder1\"foo bar.txt"
C:\test\folder2\"foo bar.txt"
C:\test\folder3\"foo bar.txt"
Ohne den rekursiven Schalter können Sie
FOR
die Anführungszeichen nicht drucken:Möglicherweise können Sie verschachtelte
FOR
Anweisungen ausführen . Das Äußere würde den Verzeichnisbaum durchlaufen und das Innere wäre das obige.quelle
FOR /R %%d in (.) DO for %%f ...
ist rekursiv, aber es müssten einige Dinge herausgearbeitet werden, damit es funktioniert. Möglicherweise müssen Sie beispielsweise eine verzögerte Erweiterung verwenden.SETLOCAL ENABLEDELAYEDEXPANSION
und!varname!
usw.Vielleicht möchten Sie sich den Befehl forfiles ansehen.
'/ S' - Rekursion. Durchsuchen Sie alle Unterverzeichnisse
'/ M "* *"' - Dateimaske. Suchen Sie nur nach Dateien mit einem Leerzeichen im Namen.
'/ C "cmd / C echo @PATH"' - Befehl. Setzen Sie diesen Befehl für alle gefundenen Dateien ab.
Beispielausgabe:
quelle
Die Flagge
f
ist diejenige, die Sie benötigen, um einen absoluten Dateinamen ohne Anführungszeichen zu erhalten (damit Sie bei Bedarf Anführungszeichen setzen können). Da dies jedoch mit dem von Ihnen gewählten Variablennamen in Konflikt steht, müssen Sie einen anderen verwenden:quelle
Danke, Dennis! Auch ich habe an einem fast identischen Problem gearbeitet. Ich wollte eine Bat-Datei, die ich in einem Eingabe-Parameter als Suchzeichenfolge für Dateinamen übergeben konnte - rekursiv über Verzeichnisse. Nur für den Fall, dass dies für jemand anderen hier nützlich ist.
quelle