2009-09-19 10 views
9

Próbuję zrobić kilka rzeczy w fazie wstępnego budowania projektu studyjnego. W szczególności próbuję wykonać niektóre polecenia na wszystkich plikach * .resx w projekcie. Oto, co mam, ale nie działa, gdy ścieżka plików/katalogu ma w sobie spację. Jak obejść te przestrzenie?Wyszukaj pliki w skrypcie wsadowym i przetwórz te pliki?

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

Możliwy duplikat [iterację wszystkich plików w katalogu z użyciem „dla” pętli] (https://stackoverflow.com/ pytania/138497/iterate-all-files-in-a-directory-using-a-for-loop) –

Odpowiedz

14

Wiesz, że for można również uruchomić rekursywnie nad katalogów?

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

znacznie łatwiejsze niż błahy z ogranicznikami i oszczędza z systemem dir.

+0

To wygląda na najczystsze rozwiązanie. Wiedziałem, że to musi być sztuczka. Jestem po prostu przyzwyczajony do * nix skryptowania, gdzie rzeczy są o wiele łatwiejsze. Dziękuję wszystkim za informacje. – bsh152s

+0

Cóż, to nie jest bardziej skomplikowane niż znaleźć/xargs, imho. – Joey

2

Można użyć findutils dla Windows - to obejmuje zarówno „znaleźć” i „xargs”

2

Można również zainstalować Cygwin uzyskać pełnowymiarową Unix-esque powłokę, która pochodzi z trusty stary polecenie "znajdź" oraz kilka innych narzędzi. Na przykład,

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

I sprawiasz, że cała twoja budowa zależy od istnienia cygwin. Niezbyt miłe. Nie mówiąc już o tym, że jest bardzo niepotrzebny do tego zadania. – Joey

4

trzymać się do tekstu parsera skorupy

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

wystarczy dodać opcję delims (dla Delim charakter, który oczywiście nie mógł istnieć), et voila!

W opcji absense tej opcji delims,/f zrobi to, co ma, tj. Przeanalizuje dane wejściowe, dzieląc je na każdą sekwencję spacji lub tabulacji.

2

Występuje nieumyślne użycie domyślnego ogranicznika przestrzeni. Można to naprawić poprzez zresetowanie delims tak:

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

Aby wygenerować listę plików prosty wszystkich istotnych plików do późniejszego przetworzenia

@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 
Powiązane problemy