2010-08-09 11 views
29

Próbuję utworzyć skrypt wsadowy dla mojego komputera z systemem Windows, który wykonuje pętlę z listy wartości (łańcuch/wartość dziesiętna) i używa każdej wartości jako parametru w pętli.Pętla z wartościami ciągu znaków z pliku wiersza polecenia systemu Windows

Poniżej jest przykład prosty dla pętli chciałbym użyć, aby wyświetlić wszystkie inne pliki wersja (z mojej listy)

FOR ? in ('1.1','1.2','2.4','3.9') do echo V[value_from_for_loop].txt 

Mam problem, w jaki sposób pętli każdej pozycji i użytkowania zmienna w moim wyciągu z echa.

+0

jest to, że składnia pseudo-kodu, czy jest to w innym języku? – Synetech

Odpowiedz

36
for %x in (1.1 1.2 2.4 3.9) do echo V%x.txt 

Do stosowania w pliku wsadowym musisz podwoić %:

for %%x in (1.1 1.2 2.4 3.9) do echo V%%x.txt 
+0

Co się stanie, jeśli ciągi będą zawierać znaki "?" Lub "*"? Czy istnieje sposób, aby uniemożliwić interpreterowi poleceń interpretowanie ich jako nazw plików? – Synetech

+0

Używam Git dla Windows "bash" powłoki (MINGW32) i otrzymuję 'bash": błąd składni w pobliżu nieoczekiwanego tokena '(''.. –

+1

@DaveHeq: Nie używaj bash i spróbuj wykonać polecenia cmd, następnie: – Joey

13

Załóżmy, że masz bardzo długą listę wartości, które będą bardzo niewygodne wpisać w wierszu poleceń. Ponadto istnieje ograniczenie długości linii komend DOS.

W tym przypadku wartości mogą być przechowywane w arbitralnie długim pliku, po jednym w wierszu. Nazywają go my-values.list, o zawartości podobnej do:

1.1 
1.2 
2.4 
3.9 
3.9.1 
3.9.2 
3.91 
3.91.1 
... 

Teraz można odczytać zmienne z tego pliku tekstowego, wiersz po wierszu:

for /f "tokens=*" %a in (c:\path\to\my-values.list) do echo. Version%~nxa.txt 
+4

@David Liddle: Oczywiście, że ma - po prostu nie rozumiem (jeszcze) jak :-) - Załóżmy bardzo długi plik tekstowy 'values.list', gdzie masz wszystkie wymienione wartości, 1 na Byłoby bardzo niezręcznie, gdybyśmy wpisali to wszystko ponownie w wierszu poleceń (który sam ma ograniczenia długości) Musiałem zrobić dokładnie to coś z ~ 2,500 wartościami kilka tygodni temu i listą, którą stworzyłem przez kolejną partię Po prostu nie potrzebowałem po prostu + nudnego 'do echa ...' ale bardziej interesujących rzeczy zamiast ... ;-) –

12

@ odpowiedź Јοеу za działa świetnie,

tutaj to sposób, w jaki go użyłem, aby "spacerować" wstępnie ustawioną listą plików w określonej kolejności.

@echo off 
for %%x in (
     a.js 
     storage.js 
     logic.js 
     main.js 
     z.js 
     ) do (
     echo your file name is %%x 
     echo "%%x" is a cool name 
     echo. 
     echo =-=-=-=-=-= 
     echo. 
     ) 

powodem, dla którego wygląda jak lista pionowa, jest więc łatwiej dodawać lub usuwać więcej elementów. (i "echo" z "kropką" dotyczy jednej pustej linii).

wyjście będzie wyglądać następująco:

C:\example>yourBatchName.cmd 
your file name is a.js 
"a.js" is a cool name 

=-=-=-=-=-= 

your file name is storage.js 
"storage.js" is a cool name 

=-=-=-=-=-= 

your file name is logic.js 
"logic.js" is a cool name 

=-=-=-=-=-= 

your file name is main.js 
"main.js" is a cool name 

=-=-=-=-=-= 

your file name is z.js 
"z.js" is a cool name 

=-=-=-=-=-= 

** PS: dla nazwy pliku aukcji należy wolą używać coś takiego:

for %%e in (*.dll) do (....

Powiązane problemy