2010-02-04 24 views
6

Tôi đã viết mã saulàm thế nào để sử dụng goto trong tập lệnh batch

setlocal 

set /A sample =1 

:first 

type C:\test.txt | find "inserted" 

if %ERRORLEVEL% EQU 0 goto test 

if %ERRORLEVEL% EQU 1 goto exam 

:test 

echo "testloop" >> C:\testloop.txt 

set /A sample = %sample% + 1 

if %sample% LEQ 4 goto first 

:exam 

echo "exam loop" >> C:\examloop.txt 

endlocal 

nhưng nó sẽ lable "thi" mặc dù mức độ lỗi là không bằng "1" plz giúp tôi

Trả lời

6

Vấn đề của bạn không phải là goto, lỗi của nó đòi hỏi phải xử lý đặc biệt, nó không giống như một biến môi trường bình thường. Thử nghiệm duy nhất bạn có thể làm với errorlevel là kiểm tra xem nó có lớn hơn hoặc bằng giá trị hay không.

vì vậy bạn phải kiểm tra errorlevel giá trị từ cao nhất đến thấp nhất bởi vì nếu errorlevel 1 sau đó if errorlevel 1 sẽ là đúng, nhưng if errorlevel 0 sẽ cũng là đúng

setlocal 
set /A sample =1 

:first 
type C:\test.txt | find "inserted" 

if errorlevel 1 goto exam 
if errorlevel 0 goto test 

:test 
echo "testloop" >> C:\testloop.txt 
set /A sample = %sample% + 1 

if %sample% LEQ 4 goto first 

:exam 
echo "exam loop" >> C:\examloop.txt 

endlocal 

nếu bạn có phần mở rộng lệnh được kích hoạt, và có không có biến môi trường nào được gọi là ERRORLEVEL (phân biệt chữ hoa chữ thường). Sau đó, về lý thuyết bạn có thể sử dụng% ERRORLEVEL% như một biến môi trường bình thường. Vì vậy, đây cũng nên làm việc

setlocal EnableExtensions 
set /A sample =1 

:first 
type C:\test.txt | find "inserted" 

if %errorlevel% EQU 1 goto exam 
if %errorlevel% EQU 0 goto test 

:test 
echo "testloop" >> C:\testloop.txt 
set /A sample = %sample% + 1 

if %sample% LEQ 4 goto first 

:exam 
echo "exam loop" >> C:\examloop.txt 
0

Bạn có thể muốn xem xét sử dụng ERRORLEVEL như nhánh trực tiếp như sau:

setlocal 

set /A sample =1 

:first 

type C:\test.txt | find "inserted" 

**goto :Branch%ERRORLEVEL%** 

:Branch0 

echo "testloop" >> C:\testloop.txt 

set /A sample = %sample% + 1 

if %sample% LEQ 4 goto first 

:Branch1 

echo "exam loop" >> C:\examloop.txt 

endlocal 
0

Có thể sử dụng || thay vì errorlevel cho phân nhánh.

setlocal 
set /a sample=1 

:first 
(Type c:\test.txt | find "inserted" >> c:\testloop.txt) || goto :branch1 
set /a sample+=1 
If %sample% leq 4 goto :first 

:brabch1 
Echo "exam loop" >> c:\examloop.txt 
+0

Stephan, nhờ t o được định dạng đúng, không phải lý do tại sao định dạng inproper mã bưu điện. – user9133538

+0

vì bạn không định dạng bất cứ điều gì. Xem [tại đây] (https://stackoverflow.com/editing-help) để biết cách thực hiện. – Stephan

0

Cách đơn giản hơn để sử dụng cho vòng lặp.

Đối/l %% một trong (1,1,4) làm (

(Type c: \ test.txt | tìm “chèn” >> c: \ testloop.txt) || goto: thực hiện

)

: thực hiện

Echo “thi vòng lặp” >> c: \ examloop.txt

Chuyển đến: eof

+0

Yêu cầu một số định dạng. – Billa

+0

@Billa: (s) anh ấy chỉ đọc làm thế nào để làm điều đó ';)' – Stephan

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