Do liczenia pętli od 1 do n w skrypcie nietoperza systemu Windows

25

Muszę uruchomić polecenie systemu Windows n razy w pliku skryptu nietoperza. Wiem, jak to zrobić w różnych językach programowania, ale nie potrafię tego zrobić w wierszu poleceń systemu Windows :-(

Spodziewałbym się czegoś takiego

for(int i = 0; i < 100; i++) {
   // do something
}

a nawet to (choć nie do końca poważnie)

1.upto(100, {
   // do something
}) 

Dzięki!

EDYTOWAĆ

Mogę napisać program w Javie, Perlu, C lub cokolwiek, co wygeneruje skrypt nietoperza, który wygląda tak

for %%N in (1 2 3 4 5 6 7 8 9 10 11 12) do echo %%N

i tak dalej. Lub nawet „lepiej”:

echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
echo 11
echo 12

a następnie go wykonać ... Chodzi o to, że potrzebuję zwięzłego sposobu na określenie zakresu liczb do iteracji w skrypcie.

Dzięki!

raoulsson
źródło
1
Odpowiedzi tutaj są całkowicie dobre, ale na miłość boską ... partia? Naprawdę? Gorąco polecam przejście na bardziej nowoczesny język.
EBGreen
Nie brzmi, jakby miał wybór w tej sprawie.
wolfgangsz
Nie widziałem niczego, co sugerowałoby, że nie ma wyboru. W rzeczywistości mówi, że umie pisać w „jakimkolwiek” języku, więc powiedziałbym, że bez dalszych informacji brzmi to tak, jakby miał wybór.
EBGreen,
Chłopaki, muszę wdrożyć kod, który jest napisany nowoczesnym językiem przez skrypt ...
raoulsson
1
Może to jest lub nie jest wymagane - czasami jest to właściwe narzędzie do pracy. Nie możesz zagwarantować, że PowerShell, a co dopiero bash, python, perl itp. Zostaną zainstalowane na serwerze Windows XP lub 2003. Partia jest całkowicie akceptowalnym rozwiązaniem.
Goyuix

Odpowiedzi:

44

Możesz to zrobić podobnie:

ECHO Start of Loop

FOR /L %i IN (1,1,5) DO (
  ECHO %i
)

1,1,5 jest dekodowany jako:

(start,step,end)

Pamiętaj również, że jeśli osadzasz to w pliku wsadowym, będziesz musiał użyć podwójnego znaku procentu (%%), aby poprzedzić zmienne, w przeciwnym razie interpreter poleceń spróbuje oszacować zmienną% i przed uruchomieniem pętli.

Goyuix
źródło
3
„Początek pętli ECHO” będzie wykonywany na każdym kroku, a nie tylko na początku.
Wstrzymano do odwołania.
1
Również użycie @znaku powstrzyma drukowanie poleceń wykonywanych z wiersza poleceń. „... DO @ (...”
Wstrzymano do odwołania.
Działa to tylko z / L po „FOR”. Dlaczego tak jest
raoulsson
1
Czy dla /? a znajdziesz: FOR / L% zmienna IN (początek, krok, koniec) DO polecenie [parametry-polecenia] Zestaw jest sekwencją liczb od początku do końca, według ilości kroków. Tak więc (1,1,5) wygeneruje sekwencję 1 2 3 4 5, a (5, -1,1) wygeneruje sekwencję (5 4 3 2 1)
EBGreen
Lepiej jest użyć %%iw tekście i dodać komentarz, który służy %ido bezpośredniego wykonania w wierszu polecenia. Większość użytkowników przetestuje to w pliku BAT i spróbuje znaleźć przyczynę błędu (tak jak ja).
i486
8

Składnia to

FOR %%A IN (1 2 3) DO ECHO %%A

Dobry artykuł tutaj i specyfika XP tutaj

Andy
źródło
6

Bezpośrednio z wiersza poleceń:

for /L %n in (1,1,100) do @echo %n

Za pomocą pliku wsadowego:

@echo off
for /L %%n in (1,1,100) do echo %%n

Wyświetla:

1
2
3
...
100
fmoraesjr
źródło
co jeśli sekwencja liczb to 0001 do 00100+ itd.?
nwgat