Mam drzewo folderów, takie jak to (to tylko przykład, będzie głębsze w moim prawdziwym przypadku):
C:\test
|
+---folder1
| foo bar.txt
| foobar.txt
|
+---folder2
| foo bar.txt
| foobar.txt
|
\---folder3
foo bar.txt
foobar.txt
Moje pliki mają jedną lub więcej spacji w nazwie i muszę wykonać na nich polecenie, więc interesuje mnie foo bar.txt, ale nie foobar.txt.
Próbowałem (w pliku wsadowym):
for /r test %%f in (foo bar.txt) do if exist %%f echo %%f
gdzie polecenie jest proste echo
.
To nie działa, ponieważ przestrzeń jest pomijana i nie otrzymuję danych wyjściowych.
To działa, ale nie jest to, czego potrzebuję:
for /r test %%f in (foobar.txt) do if exist %%f echo %%f
Drukuje:
C:\test\folder1\foobar.txt
C:\test\folder2\foobar.txt
C:\test\folder3\foobar.txt
Próbowałem użyć znaku cudzysłowu („), ale to nie działa:
for /r test %%f in ("foo bar.txt") do if exist %%f echo %%f
To nie działa, ponieważ znak cudzysłowu jest nadal zawarty w danych wyjściowych:
C:\test\folder1\"foo bar.txt"
C:\test\folder2\"foo bar.txt"
C:\test\folder3\"foo bar.txt"
Bez przełącznika rekurencyjnego możesz powiedzieć,
FOR
aby nie drukować cytatów:Możesz być w stanie wykonać zagnieżdżone
FOR
instrukcje. Zewnętrzne będzie chodzić po drzewie katalogów, a wewnętrzne będzie tym powyżej.źródło
FOR /R %%d in (.) DO for %%f ...
jest rekurencyjny, ale byłoby kilka rzeczy do wypracowania, aby działało. Może być konieczne na przykład użycie opóźnionego rozszerzenia.SETLOCAL ENABLEDELAYEDEXPANSION
i!varname!
itp.Możesz przyjrzeć się poleceniu forfiles.
„/ S” - rekurencja. Przeszukaj wszystkie podkatalogi
'/ M "* *"' - maska pliku. Wyszukaj tylko pliki ze spacją w nazwie.
'/ C "cmd / C echo @PATH"' - Polecenie. Wydaj to polecenie na wszystkich znalezionych plikach.
Przykładowe dane wyjściowe:
źródło
Flaga
f
jest tą, której potrzebujesz, aby uzyskać bezwzględną nazwę pliku bez cudzysłowów (w razie potrzeby możesz wstawiać cudzysłowy). Ale ponieważ jest on sprzeczny z wybraną nazwą zmiennej, musisz użyć innej:źródło
Dzięki, Dennis! Ja także pracowałem nad prawie identycznym problemem. Chciałem plik nietoperza, który mógłbym przekazać w parmie wejściowej jako ciąg wyszukiwania nazw plików - rekurencyjnie przez katalogi. Na wszelki wypadek jest to przydatne dla kogoś innego.
źródło