Czy w pliku wsadowym systemu Windows można wywołać więcej niż jedno polecenie w jednej FOR
pętli? Powiedzmy na przykład, że chcę wydrukować nazwę pliku i po usunięciu go:
@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.
Wiem, że w tym przypadku mógłbym to rozwiązać, wykonując dwie różne pętle FOR: jedną do wyświetlania nazwy, a drugą do usuwania pliku, ale czy można to zrobić tylko w jednej pętli?
windows
batch-file
cmd
Marco Demaio
źródło
źródło
for %i in (1 2 3) do echo %i & echo foo
wypisuje to, czego bym się spodziewał: „1”, „foo”, „2”, „foo”, „3”, „foo” (w osobnych wierszach).&&
raczej niż&
?&&
nie powiedzie się, jeśli pierwsze polecenie nie powiedzie się,&
niezależnie wykona drugie polecenie.DO
opcjami -parens znajduje się znak bez znaku zmiany znaczenia . Możesz im uciec, dodając^
do nich a.Używanie
&
jest dobre w przypadku krótkich poleceń, ale ta pojedyncza linia może bardzo szybko stać się bardzo długa. Kiedy tak się stanie, przełącz się na składnię wielowierszową.Umieszczenie
(
i ma)
znaczenie. Okrągłe nawiasy poDO
muszą być umieszczone w tym samym wierszu, w przeciwnym razie plik wsadowy będzie nieprawidłowy.Zobacz
if /?|find /V ""
szczegóły.źródło
DO
znaku NIE może być umieszczany w następnej linii, ponieważ spowoduje to przerwanie pliku wsadowego. W kodzie, kiedy piszę pętlę for, zwykle umieszczam nawias klamrowy w{
następnej linii.SilverSkin i Anders mają rację. Możesz użyć nawiasów, aby wykonać wiele poleceń. Musisz jednak upewnić się, że same polecenia (i ich parametry) nie zawierają nawiasów.
cmd
łapczywie wyszukuje pierwszy nawias zamykający, zamiast z wdziękiem obsługiwać zagnieżdżone zestawy nawiasów. Może to spowodować, że reszta wiersza poleceń nie zostanie przeanalizowana lub może spowodować, że niektóre nawiasy zostaną przekazane do poleceń (npDEL myfile.txt)
.).Rozwiązaniem tego problemu jest podzielenie treści pętli na osobną funkcję. Zauważ, że prawdopodobnie będziesz musiał przeskoczyć wokół ciała funkcji, aby uniknąć „wpadnięcia” do niego.
źródło
C:\Program Files (x86)
.