Kịch bản 1:
Đầu vào ("Xóa dấu ngoặc kép.cmd" "Đây là bản thử nghiệm")
@ECHO OFF
REM Set "string" variable to "first" command line parameter
SET STRING=%1
REM Remove Quotes [Only Remove Quotes if NOT Null]
IF DEFINED STRING SET STRING=%STRING:"=%
REM IF %1 [or String] is NULL GOTO MyLabel
IF NOT DEFINED STRING GOTO MyLabel
REM OR IF "." equals "." GOTO MyLabel
IF "%STRING%." == "." GOTO MyLabel
REM GOTO End of File
GOTO :EOF
:MyLabel
ECHO Welcome!
PAUSE
Đầu ra (Không có gì,% 1 KHÔNG trống, trống hoặc NULL):
Chạy ("Xóa Báo giá.cmd") mà không có bất kỳ tham số nào với tập lệnh trên 1
Đầu ra (% 1 trống, trống hoặc NULL):
Welcome!
Press any key to continue . . .
Lưu ý: Nếu bạn đặt một biến trong một IF ( ) ELSE ( )
câu lệnh, nó sẽ không có sẵn để DEFINED cho đến khi nó thoát khỏi câu lệnh "IF" (trừ khi "Mở rộng biến đổi bị trì hoãn" được bật; một khi được bật, hãy sử dụng dấu chấm than "!" Thay cho dấu chấm than "!" biểu tượng phần trăm "%"}.
Ví dụ:
Kịch bản 2:
Đầu vào ("Xóa dấu ngoặc kép.cmd" "Đây là bản thử nghiệm")
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET STRING=%0
IF 1==1 (
SET STRING=%1
ECHO String in IF Statement='%STRING%'
ECHO String in IF Statement [delayed expansion]='!STRING!'
)
ECHO String out of IF Statement='%STRING%'
REM Remove Quotes [Only Remove Quotes if NOT Null]
IF DEFINED STRING SET STRING=%STRING:"=%
ECHO String without Quotes=%STRING%
REM IF %1 is NULL GOTO MyLabel
IF NOT DEFINED STRING GOTO MyLabel
REM GOTO End of File
GOTO :EOF
:MyLabel
ECHO Welcome!
ENDLOCAL
PAUSE
Đầu ra:
C:\Users\Test>"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd" "This is a Test"
String in IF Statement='"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd"'
String in IF Statement [delayed expansion]='"This is a Test"'
String out of IF Statement='"This is a Test"'
String without Quotes=This is a Test
C:\Users\Test>
Lưu ý: Nó cũng sẽ xóa dấu ngoặc kép từ bên trong chuỗi.
Ví dụ: (sử dụng tập lệnh 1 hoặc 2): C: \ Users \ Test \ Documents \ Batch Files> "Xóa dấu ngoặc kép.cmd" "Đây là" một "Thử nghiệm"
Đầu ra (Kịch bản 2):
String in IF Statement='"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd"'
String in IF Statement [delayed expansion]='"This is "a" Test"'
String out of IF Statement='"This is "a" Test"'
String without Quotes=This is a Test
Thực thi ("Xóa dấu ngoặc kép.cmd") mà không có bất kỳ tham số nào trong Tập lệnh 2:
Đầu ra:
Welcome!
Press any key to continue . . .
if "%1" == "" GOTO MyLabel
không giết chết nghiêm trọng việc thực thi tập lệnh miễn là%1
có số lượng trích dẫn kép chẵn. Tôi thấy rằng một số lượng lớn các dấu ngoặc kép%1
sẽ giết chết việc thực thi tập lệnh với lỗi này:The syntax of the command is incorrect.
Giải pháp bên dưới sử dụng dấu ngoặc vuông để giải quyết vấn đề đã được đánh dấu là câu trả lời đúng nhưng dường như không làm gì tốt hơn . Giải pháp đó cũng thất bại với cùng một lỗi khi%1
có số lượng dấu ngoặc kép lẻ.