É importante usar% 1 para colocar algo em torno dele para evitar que o arquivo em lote seja quebrado quando% 1 estiver vazio, porque% 1 não é uma variável que é substituída pelo valor, como injeção de SQL um exemplo de injeção em lote e quando o valor é nada e o% 1 está em um IF, então você tem código quebrado. if %1==""
torna-se if == ""
e apresenta um erro.
Por que, se definido não funciona em% 1,% 1 é o valor não a variável, portanto, portanto, definido não funciona lá. Para o código que funciona para% 1 estar vazio, você precisa de um código que não seja quebrado quando% 1 for substituído por nada. Experimente if "%1"==""
ou tente if [%1]==[]
Dizer -% 1 parece um pouco confuso, não parece uma boa convenção para mim! Tecnicamente, você poderia até mesmo fazer if a%1==a%1
ou if %1a==%1a
, mas a convenção tende a ser []
Você pode usar aspas, ou [] ou qualquer caractere (s). Mas como supercat apontou no comentário, as citações não são uma boa ideia em torno de um% 1. (Porque se o% 1 contiver espaços, o usuário incluirá aspas no que é passado para% 1, e se houver um espaço no% 1 e no arquivo em lote você colocar aspas ao redor do% 1, as cotações serão canceladas e o espaço não mencionado causará um erro).
Se você estivesse fazendo um IF na linha de comando e não testando nenhuma variável, você não teria% 1 e nem precisaria []. Você diria IF "a b c"=="a b c" echo a
ou IF a==b echo a
Se estiver em um arquivo de lote, geralmente você tem% 1 e, em vez de usar aspas em torno de% 1, use, por exemplo, um ou dois caracteres em torno dele, por ex. [%1]
e use aspas se você precisar preservar espaços e não for% 1, por exemplo, por exemplo. IF [%1]==[a]
ou IF [%1]==["a b"] echo a
Não faça "%1"
porque o% 1 já pode ter aspas que serão canceladas e, se o% 1 tiver um espaço, sua declaração if será quebrada.
Se você estava na linha de comando e estava testando uma variável, isso depende de a variável ter aspas. Você pode olhar o conteúdo.
É possível que uma variável tenha um espaço e não contenha aspas.
Portanto, neste caso de linha de comando específico, colocar aspas em torno de% a% não irá aspas duplas, e você terá que colocar aspas em torno do% a% se quiser testá-lo com "a b"
C:\>set a=a b
C:\>echo %a%
a b
C:\>IF %a%=="a b" echo sdf
b=="a b" was unexpected at this time.
C:\>IF "%a%"=="a b" echo sdf
sdf
So ^^^ we want "%a%"
Considerando que, se% a% continha citações, seria um caso diferente
C:\>set a="a b"
C:\>echo %a%
"a b"
C:\>IF %a%=="a b" echo a
a
C:\>IF "%a%"=="a b" echo a
b""=="a b" was unexpected at this time.
C:\>
^^^^ So there we want %a% without quotes around it.
Portanto, é uma questão de saber se a variável ou parâmetro contém aspas. Se o% 1 tiver espaços, ele conterá aspas. Então, sabemos que, se comparássemos% 1 a "a b", então não faríamos "% 1". E se% 1 não continha aspas, não conteria espaços, por isso, não faríamos "% 1". Então, acho que você nunca faria "% 1". Portanto, se% 1 contiver espaços, haverá citações dentro de% 1 e os espaços já serão preservados.
Eu riscou o abaixo à luz do comentário do supercat. E adicionei mais ao meu post acima.
As citações são melhores em torno do% 1, em vez de [] ou de algum caractere como A ou -, porque, por exemplo, se você usar [], ele não preservará espaços
C: \ > if [d a b] == [d a b] echo sdf
a foi inesperado neste momento.
Diga if "d a b"
que funcionará. Então if "%1"
é melhor que outros caractere (s) como if [%1]
ou a%1a
ou -%1