2009-09-19 5 views
9

Ich versuche einige Dinge während der Pre-Build-Phase eines Visual Studio-Projekts zu tun. Insbesondere versuche ich, einige Befehle für alle * .resx-Dateien innerhalb des Projekts auszuführen. Hier ist, was ich habe, aber es funktioniert nicht, wenn die Dateien/Verzeichnispfad ein Leerzeichen in ihnen haben. Wie komme ich um diese Räume herum?Suche nach Dateien in einem Batch-Skript und die Verarbeitung dieser Dateien?

for /f %%a in ('dir /B /S *.resx') do echo "%%a" 
+0

Mögliche Duplikat [Iterate alle Dateien in einem Verzeichnis mit einem ‚für‘ loop] (https://stackoverflow.com/ zu erzeugen Fragen/138497/iterate-all-files-in-einem-Verzeichnis-Using-a-for-loop) –

Antwort

14

Sie wissen, dass for auch rekursiv über Verzeichnisse laufen können?

for /r %%x in (*.resx) do echo "%%x" 

Viel einfacher, als mit Begrenzungszeichen Hantieren und erspart Ihnen dir läuft.

+0

Das sieht nach der saubersten Lösung aus. Ich wusste, dass es einen Trick geben musste. Ich bin nur so gewöhnt an * nix scripting, wo die Dinge so viel einfacher sind. Danke euch allen für die Info. – bsh152s

+0

Nun, es ist kaum verworrener als finden/xargs, imho. – Joey

2

Sie können findutils für Windows verwenden - es umfasst sowohl „finden“ und „xargs“

2

Sie auch Cygwin installieren könnte eine ausgewachsene Unix-artige Shell zu bekommen, die mit dem altvertrauten kommt "Find" -Befehl und ein paar andere Tools. Zum Beispiel

find . -name "*.resx" | xargs grep MyProjectName 
+0

Und Sie machen Ihre gesamte Build abhängig von der Existenz von Cygwin. Nicht sehr nett. Ganz zu schweigen von der Tatsache, dass es für diese Aufgabe sehr unnötig ist. – Joey

4

-Stick mit dem für Textparser der Schale

for /f "delims=|" %%a in ('dir /B /S *.resx') do echo "%%a" 

nur delims Option hinzufügen (für einen delim Charakter, die offensichtlich nicht existieren könnte), et voila!

In der Abwesenheit dieser Delims-Option wird/f tun, was es soll, d. H. Die Eingabe analysieren, indem sie bei jeder Leerstellen- oder Tabulatorsequenz aufgeteilt wird.

2

Sie kommen in die versehentliche Verwendung des Standard-Space-Delimeters. Sie können das Problem beheben, indem die delims Neueinstellung wie folgt:

for /f "delims=" %%a in ('dir /B /S *.resx') do echo "%%a" 
1

Um eine einfache Dateiliste aller relevanten Dateien für eine spätere Verarbeitung

@echo create a results file… 
if exist results.txt (del results.txt) 
echo. >NUL 2>results.txt 

@echo minimal recursive subdirectory search for filespec... 
dir /s /a /b "*.resx" >>results.txt