Script em lote Se o comando em uma string

1

O que há de errado com as seguintes linhas de comando para o meu script em lote?

set test=BE99012345678901


if %test% == "BE99????????????"(
echo This number begins with BE99
)
Else (
echo This number doesn't begin with BE99
)
pause
    
por Bucci 19.06.2014 / 13:52

3 respostas

1

Tente isto:

set test=BE99012345678901

if "%test:~0,4%"=="BE99" (
echo This number begins with BE99
) else (
echo This number doesn't begin with BE99
)
pause

Você receberá a seguinte saída:

This number begins with BE99

Por favor, note:

if %test% == "BE99????????????" fará isso: "BE99012345678901" == "BE99????????????"

e isso mostrará a seguinte saída:

This number doesn't begin with BE99

    
por 19.06.2014 / 15:28
1

A resposta do barlop cobre a maioria dos seus problemas. Também deve ser observado que você precisa que o ELSE esteja na mesma linha que o parêntese de fechamento para o IF . Assim:

IF "%var%"=="whatever" (
  REM Do stuff
) ELSE (
  REM Do other stuff
)
    
por 19.06.2014 / 20:41
0

Parece que você não pode usar o ponto de interrogação ou qualquer curinga em que a linha == b O operador == não aceita? como especial, é considerado literal. E não olha para nomes de arquivos também. Então, isso só serve para provar que realmente é preciso? como literal.

Além disso, no Linux, se você fez eco? ele seria interpretado pelo shell antes de ir para o comando echo e retornaria um nome de arquivo de um comprimento de caractere. No Windows? ou * não são interpretados pelo shell, eles são passados para um comando. DIR usa? e *, trata-os como especiais, o ECHO não, e o teste de igualdade se == não, e apenas ecoaria um ponto de interrogação. Eu duvido que o que você escreveu lá seja válido no bash também. Como no linux? e * estão sempre relacionados a nomes de arquivos e você parece querer apenas a comparação de variáveis.

C:\a>touch BE99 <---- a gnuwin32 touch line to create a file called BE99

C:\a>if BE99==BE9? echo true

C:\a>if "BE99"=="BE9?" echo true

C:\a>

C:\a>dir BE9? /b
BE99

C:\a>

Então? trabalha com DIR, mas não com um == b

Mas além disso, se você fizer "4" == 4, então ele dirá false, já que você tem que fazer aspas ao redor de ambos ou em torno de nenhum deles. A razão para as cotações é se você fizer% var% ==% var% e% var% estiver vazio, então você tem um erro de sintaxe porque ele funciona por substituição, substituição, então você não obtém nada em nenhum dos lados do == então apenas se = =. Então é melhor usar aspas, do que sem aspas. Alguns usam []. if [% var%] == [% var%]

Você pode usar isso

C:\a>set test=BE9923432423

C:\a>echo %test:~0,4%
BE99

Então, no seu código, você poderia fazer if "%test:~0,4%"=="BE99" (

    
por 19.06.2014 / 14:16