Script 1:
Entrada ("Remover Quotes.cmd" "Este é um teste")
@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
Saída (não há,% 1 NÃO estava em branco, vazio ou NULL):
Execute ("Remove Quotes.cmd") sem nenhum parâmetro com o script acima 1
Saída (% 1 está em branco, vazio ou NULL):
Welcome!
Press any key to continue . . .
Nota: Se você definir uma variável dentro de um IF ( ) ELSE ( )
instrução, ela não estará disponível para DEFINED até que saia da instrução "SE" (a menos que a opção "Expansão atrasada da variável" esteja ativada; uma vez ativado, use um ponto de exclamação "!" No lugar do símbolo de porcentagem "%"}.
Por exemplo:
Script 2:
Entrada ("Remover Quotes.cmd" "Este é um teste")
@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
Resultado:
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: Ele também removerá aspas de dentro da string.
Por exemplo (usando o script 1 ou 2): C: \ Usuários \ Teste \ Documentos \ Arquivos em lote> "Remover Quotes.cmd" "Este é" um "Teste"
Saída (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
Execute ("Remove Quotes.cmd") sem nenhum parâmetro no Script 2:
Resultado:
Welcome!
Press any key to continue . . .
if "%1" == "" GOTO MyLabel
não mata fatalmente a execução do script, desde que%1
tenha um número par de aspas duplas. Vejo que um número ímpar de aspas duplas%1
mata a execução do script com este erro:The syntax of the command is incorrect.
A solução abaixo, que usa colchetes para resolver o problema, foi marcada como a resposta correta, mas parece que não está melhorando. . Essa solução também falha com o mesmo erro quando%1
há um número ímpar de aspas duplas.