Сценарій 1:
Input ("Видалити Quotes.cmd" "Це тест")
@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
Вихід (немає,% 1 НЕ було порожнім, порожнім або NULL):
Запустіть ("Видалити квоти.cmd") без будь-яких параметрів із вищевказаним сценарієм 1
Вихід (% 1 порожній, порожній або NULL):
Welcome!
Press any key to continue . . .
Примітка. Якщо ви встановите змінну всередині IF ( ) ELSE ( )
оператора, вона буде недоступною для DEFINED до того моменту, поки вона не закриє оператор "IF" (якщо не ввімкнено "Затримка змінного розширення"; після ввімкнення використовується знак оклику "!" Замість відсоток "%" символ}.
Наприклад:
Сценарій 2:
Input ("Видалити Quotes.cmd" "Це тест")
@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
Вихід:
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>
Примітка. Це також видалить лапки з всередині рядка.
Наприклад (за допомогою сценарію 1 або 2): C: \ Users \ Test \ Documents \ Batch Files> "Remove Quotes.cmd" "Це" a "Test"
Вихід (сценарій 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
Виконати ("Видалити Quotes.cmd") без будь-яких параметрів у Сценарії 2:
Вихід:
Welcome!
Press any key to continue . . .
if "%1" == "" GOTO MyLabel
не знищує фатально виконання сценарію до тих пір, поки%1
має парне число подвійних лапок. Я бачу, що непарна кількість подвійних лапок%1
вбиває виконання сценарію з цією помилкою:The syntax of the command is incorrect.
Рішення нижче, яке використовує квадратні дужки для вирішення проблеми, було позначене як правильну відповідь, але це, здається, не робить нічого кращого . Це рішення також виходить з тієї ж помилки, коли%1
має непарне число подвійних лапок.