2012-06-15 20 views
7

Miałem wesołe, dobre wyszukiwanie w świecie Google, aby znaleźć podobny problem do mojego, ale nie mogę znaleźć żadnych przykładów ludzi robiących rzeczy poza ich FOR/F pętli, więc zrezygnowałem z tworzenia nowego wątku.Wszystko po wykonaniu pętli DOS FOR/F

Używam pętli FOR/F do wykonania Gem Ruby raz w wierszu, który znajdzie w pliku referencyjnym, który doskonale działa. Problem polega na tym, że po zakończeniu przewijania pliku referencyjnego i wykonaniu Ruby Gem z odpowiednią ilością razy, nie zakończy on niczego więcej w pliku .CMD poza pętlą FOR/F.

Oto mój kod cmd:

FOR /F "tokens=1,2,3 delims=," %%a in (c:\cygwin\usr\work\easy.lst) do (
c:\ruby191\bin\scrapitalist website -u http://www.website.com/%%a/%%c/%%b.html -o  C:\cygwin\usr\autobets\work\%%b_%%c.easy 
) 
copy c:\cygwin\usr\work\*.easy c:\cygwin\usr\autobets\work\easy.imp 

Plik easy.lst ma dwa wiersze danych w niej zawartych.

Pętla działa dobrze, wykonując Klejnot Ruby i tworząc pliki * .easy jako wynik, jednak polecenie KOPIOWANIE nigdy nie zostanie wykonane. Mogę zastąpić kopię ECHO, lub w rzeczywistości cokolwiek, ale nie zostanie wykonana.

Nie widzę, czego brakuje mi w mojej składni FOR/F - czy pomysły pomysłów?

Dzięki

+1

Czy mogę zaproponować powłokę w stylu UNIX? Składnia jest o wiele potężniejsza i dużo czystsza. Wygląda na to, że masz już zainstalowane cygwin, więc dlaczego nie po prostu użyć powłoki bash, która jest z nim dostępna? – tdammers

+0

@tdammers to uczciwa sugestia, ale to także sugerowanie kodowania w języku C#, gdy OP chce zgromadzenia, bez względu na przyczynę. –

Odpowiedz

10

Przypuszczam, że scrapitalist jest sam plik wsadowy, dlatego zatrzymuje plik wsadowy, ale jak dla pętli jest buforowane, to działa do końca.

Aby rozwiązać ten problem, potrzebujesz tylko pojedynczego call jako prefiksu.

FOR /F "tokens=1,2,3 delims=," %%a in (c:\cygwin\usr\work\easy.lst) do (
    call c:\ruby191\bin\scrapitalist website -u http://www.website.com/%%a/%%c/%%b.html -o  C:\cygwin\usr\autobets\work\%%b_%%c.easy 
) 
copy c:\cygwin\usr\work\*.easy c:\cygwin\usr\autobets\work\easy.imp 
+0

jeb - Masz całkowitą rację, to rozwiązało problem. Irytujące, próbowałem go za pomocą polecenia "Call", więc musiałem popełnić błąd składniowy w tym czasie. Grrrr! Wielkie dzięki! – user1458484

Powiązane problemy