2012-06-15 156 views
7

Tôi đã tìm kiếm vui vẻ thông qua thế giới của google để tìm một vấn đề tương tự với tôi, nhưng tôi không thể tìm thấy bất kỳ ví dụ nào về những người làm việc bên ngoài FOR/F vòng và vì vậy tôi từ chức để tạo ra một chủ đề mới.Bất cứ điều gì sau khi DOS FOR/F vòng lặp không thực hiện

Tôi đang sử dụng vòng lặp FOR/F để thực thi một Gem Ruby một lần trên mỗi dòng mà nó tìm thấy trong tệp tham chiếu, tệp này hoạt động hoàn hảo. Vấn đề là, khi nó đã cuộn xong thông qua tệp tham chiếu của nó và thi hành Ruby Gem đúng số lần, nó sẽ không hoàn thành bất kỳ thứ gì khác trong tệp .CMD bên ngoài vòng lặp FOR/F.

Đây là mã .CMD tôi:

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 

File easy.lst có hai dòng dữ liệu trong đó.

Vòng lặp hoạt động tốt, thực thi Ruby Gem và tạo tệp * .easy làm đầu ra, tuy nhiên, lệnh COPY không bao giờ thực thi. Tôi có thể thay thế bản sao bằng ECHO, hoặc trên thực tế bất cứ điều gì, nhưng nó sẽ không thực thi.

Tôi không thể thấy những gì tôi bị thiếu trong cú pháp FOR/F của mình - bất kỳ ý tưởng nào là peeps?

Cảm ơn

+1

Tôi có thể đề xuất vỏ kiểu UNIX không? Cú pháp mạnh hơn rất nhiều, và rất nhiều saner. Có vẻ như bạn đã cài đặt Cygwin rồi, vậy tại sao không chỉ sử dụng bash shell đi kèm với nó? – tdammers

+0

@tdammers là một gợi ý hợp lý, nhưng điều đó cũng giống như đề xuất mã hóa trong C# khi OP muốn lắp ráp, bất kể lý do gì có thể. –

Trả lời

10

Tôi giả sử rằng scrapitalist là một tập tin thực thi chính nó, do đó nó dừng lại các tập tin thực thi, nhưng như FOR-loop được lưu trữ, nó làm việc đến cùng.

Để giải quyết vấn đề này, bạn chỉ cần một tiền tố call.

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 - Bạn hoàn toàn đúng, điều này giải quyết được vấn đề. Điều gây phiền nhiễu, tôi đã thử nó với lệnh 'Gọi', vì vậy tôi phải có một lỗi cú pháp tại thời điểm đó. Grrrr! Cảm ơn nhiều! – user1458484

Các vấn đề liên quan