Skrypt 1:
Dane wejściowe („Usuń Quotes.cmd” „To jest test”)
@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
Dane wyjściowe (nie ma,% 1 NIE było puste, puste lub NULL):
Uruchom („Usuń Quotes.cmd”) bez żadnych parametrów z powyższym skryptem 1
Dane wyjściowe (% 1 jest pusty, pusty lub NULL):
Welcome!
Press any key to continue . . .
Uwaga: Jeśli ustawisz zmienną wewnątrz IF ( ) ELSE ( )
instrukcji, nie będzie ona dostępna dla DEFINICJI, dopóki nie wyjdzie z instrukcji „JEŻELI” (chyba że włączona jest opcja „Opóźnione rozszerzanie zmiennej”; po włączeniu użyj wykrzyknika „!” Zamiast symbol procentu „%”}.
Na przykład:
Skrypt 2:
Dane wejściowe („Usuń Quotes.cmd” „To jest test”)
@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
Wynik:
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>
Uwaga: usunie także cudzysłowy z ciągu.
Na przykład (przy użyciu skryptu 1 lub 2): C: \ Users \ Test \ Documents \ Batch Files> „Usuń Quotes.cmd” „To jest„ test ”
Dane wyjściowe (skrypt 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
Wykonaj („Usuń Quotes.cmd”) bez żadnych parametrów w Skrypcie 2:
Wynik:
Welcome!
Press any key to continue . . .
if "%1" == "" GOTO MyLabel
nie zabija śmiertelnie wykonywania skryptu, o ile%1
ma parzystą liczbę podwójnych cudzysłowów. Widzę, że nieparzysta liczba podwójnych cudzysłowów%1
zabija wykonanie skryptu z tym błędem:The syntax of the command is incorrect.
Poniższe rozwiązanie, które używa nawiasów kwadratowych do rozwiązania problemu, zostało oznaczone jako poprawna odpowiedź, ale wydaje się, że nie działa lepiej . To rozwiązanie również nie działa z tym samym błędem, gdy%1
zawiera nieparzystą liczbę podwójnych cudzysłowów.