2011-06-23 3 views
5

Trong một cửa sổ tập tin tiêu chuẩn hàng loạt (.cmd) Tôi muốn làm:Tại sao FOR/F "skip = 0" không thành công?

FOR /F "skip=0" %%G IN (filename.txt) DO (ECHO %%G) 

nhưng tôi nhận " was unexpected at this time.

"skip=1" hoạt động tốt (Trong mã thực tế của tôi 0 là một biến).

Theo ss64.com mặc định là skip=0, nhưng có vẻ như không hoạt động khi được đặt rõ ràng.

Tôi có làm sai không? Hoặc là có một cách giải quyết tôi có thể sử dụng?

Edit:

Tôi đã thử này trên cả hai máy chủ Windows 2003 và Windows 7.

Nội dung của filename.txt có thể là:

something 
stuff 
unicorns 

Trả lời

6

Nó thực sự không giống như 0, khiến trình phân tích cú pháp mong đợi nhiều hơn sau khi nó (Bạn cũng có thể truy cập nó khi cố gắng sử dụng 09 mà nó cố gắng phân tích cú pháp dưới dạng bát phân, không thành công).

Tôi đoán bạn cần phải tạo biến môi trường giữ toàn bộ skip=n một phần hoặc không có gì và chèn vào danh sách đối số. Một cái gì đó như

if %N% GTR 0 (
    set SKIP="skip=%N%" 
) else (
    set SKIP= 
) 

và sau đó sử dụng

for /f %SKIP% %%G ... 

(hoặc không có dấu ngoặc kép nếu bạn cần phải vượt qua nhiều lựa chọn hơn).

+0

tuyệt vời. Tôi đã sửa mã để các lệnh 'set' nằm trên các dòng riêng của chúng. Nếu không, 'SKIP' sẽ được đặt thành thứ không mong muốn. :) – steenhulthin

+0

@steenhulthin: Tôi có thể hỏi ý bạn là gì không? –

+1

@Andriy Tất nhiên. Nếu bạn nhìn vào lịch sử, bạn sẽ thấy rằng mã ban đầu nằm trong một dòng: 'if% N% GTR 0 đặt SKIP =" skip =% N% "khác đặt SKIP =', điều này sẽ gây '% SKIP%' thành được đặt thành '" skip =% N% "else set SKIP =' if '% N%' lớn hơn 0. – steenhulthin

0

tôi thêm một "" false "" dòng đầu tiên để tránh dòng IF (s) và giữ cho "bỏ qua" bất cứ lúc nào:

:: liste des fichiers du repertoire et de ses sous-repertoires 
echo *** liste des fichiers du repertoire et de ses sous-repertoires >%FicListImg% 
dir /s /b /a:-d %RepImg%\*.* >> %FicListImg% 
set compteurA=0 
for /f %%a in (%FicListImg%) do set /a CompteurA+=1 
set /a CompteurA = %CompteurA%-1 
set /a NbImg = %CompteurA%-1 
@echo Repertoire Images : %RepImg% (%NbImg% images)