Сценарий 1:
Ввод («Удалить цитаты. 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 не был пустым, пустым или пустым):
Выполнить ("Удалить Quotes.cmd") без каких-либо параметров с вышеупомянутым скриптом 1
Вывод (% 1 пусто, пусто или NULL):
Welcome!
Press any key to continue . . .
Примечание. Если вы установите переменную внутри IF ( ) ELSE ( )
оператора, она не будет доступна для DEFINED до тех пор, пока она не выйдет из оператора «IF» (если только «Delayed Variable Expansion» не включен; после включения используйте восклицательный знак «!» Вместо символ процента "%"}.
Например:
Сценарий 2:
Ввод («Удалить цитаты. 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> "Удалить Quotes.cmd" "Это" a "Тест"
Вывод (сценарий 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
имеет нечетное число двойных кавычек.