Guión 1:
Entrada ("Quitar Quotes.cmd" "Esta es una prueba")
@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
Salida (No hay ninguno,% 1 NO estaba en blanco, vacío o NULL):
Ejecutar ("Quitar Quotes.cmd") sin ningún parámetro con el script anterior 1
Salida (% 1 está en blanco, vacío o NULL):
Welcome!
Press any key to continue . . .
Nota: Si establece una variable dentro de una IF ( ) ELSE ( )
instrucción, no estará disponible para DEFINIR hasta después de que salga de la instrucción "SI" (a menos que esté habilitada la "Expansión de variable retrasada"; una vez habilitada, use un signo de exclamación "!" En lugar de símbolo de porcentaje "%"}.
Por ejemplo:
Guión 2:
Entrada ("Quitar Quotes.cmd" "Esta es una prueba")
@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
Salida:
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>
Nota: También eliminará las comillas del interior de la cadena.
Por ejemplo (usando el script 1 o 2): C: \ Users \ Test \ Documents \ Batch Files> "Remove Quotes.cmd" "Esto es" una "prueba"
Salida (Script 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
Ejecute ("Eliminar Quotes.cmd") sin ningún parámetro en el Script 2:
Salida:
Welcome!
Press any key to continue . . .
if "%1" == "" GOTO MyLabel
no mata fatalmente la ejecución del script siempre que%1
tenga un número par de comillas dobles. Veo que un número impar de comillas dobles%1
mata la ejecución del script con este error:The syntax of the command is incorrect.
la siguiente solución que utiliza corchetes para resolver el problema se ha marcado como la respuesta correcta, pero no parece estar mejorando. . Esa solución también falla con el mismo error cuando%1
tiene un número impar de comillas dobles.