그것은 % 1이 비어있을 때 % 1 SQL 주입처럼, 그것은 값으로 대체됩니다 변수가 아니기 때문에 그것이 파괴에서 배치 파일을 방지하기 위해 주위에 % 1을 사용하여 뭔가를 넣어 때 중요 배치에 주입의 예 , 그리고 값이 아무것도 아니며 % 1이 IF에 있으면 코드가 손상됩니다. if %1==""
되고 if == ""
오류가 발생합니다.
정의 된 값이 % 1에서 작동하지 않는 이유는 % 1이 변수가 아닌 값이므로 정의 된 값이 작동하지 않습니다. % 1이 비어있는 코드의 경우 % 1을 아무것도 대체하지 않아도 깨지지 않는 코드가 필요합니다. 시도 if "%1"==""
또는 시도if [%1]==[]
-% 1은 약간 혼란스러워 보이지만 나에게 좋은 관례는 아닙니다! 기술적으로 당신이 할도 수 if a%1==a%1
또는 if %1a==%1a
하지만 규칙은 경향이있다[]
따옴표 나 [] 또는 모든 문자를 사용할 수 있습니다. 그러나 supercat이 주석에서 지적했듯이 인용 부호는 % 1 주위에 좋은 생각이 아닙니다. (% 1에 공백이 포함되어 있기 때문에 사용자는 % 1에 전달되는 항목에 따옴표를 포함하고 % 1과 배치 파일에 공백이 있으면 % 1 주위에 따옴표를 넣으면 따옴표가 취소됩니다. 인용되지 않은 공간에 오류가 발생합니다).
명령 행에서 IF를 수행하고 변수를 테스트하지 않은 경우 % 1이없고 []가 필요하지 않습니다. 당신은 말할 것 IF "a b c"=="a b c" echo a
또는 IF a==b echo a
배치 파일에 다음 자주 % 1 주위에 따옴표를 사용하는 대신 % 1이 있고, 경우, 예를 들어 주위 예를 들어, 하나 또는 두 개의 문자를 사용 [%1]
하고 공간을 보존해야하는 경우 따옴표를 사용하고는 % 아니다 1 egeg IF [%1]==[a]
또는 IF [%1]==["a b"] echo a
하지 마십시오 "%1"
. % 1에 이미 따옴표가 취소 될 따옴표가있을 수 있으며 % 1에 공백이 있으면 if 문이 끊어집니다.
명령 행에 있고 변수를 테스트하는 경우 변수에 따옴표가 있는지 여부에 따라 다릅니다. 내용을 볼 수 있습니다.
변수에 공백이 있고 따옴표를 포함하지 않을 수 있습니다.
따라서이 특정 명령 행 사례에서 % a % 주위에 따옴표를 두는 것은 큰 따옴표가 아니며 "a b"에 대해 테스트하려는 경우 % a % 주위에 따옴표를 사용해야합니다.
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%"
% a %에 따옴표가 포함 된 경우 다른 경우입니다.
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.
변수 또는 매개 변수에 따옴표가 포함되어 있는지 여부는 모두 문제입니다. % 1에 공백이 있으면 따옴표가 포함됩니다. 따라서 % 1을 "a b"와 비교하면 w는 "% 1"을 수행하지 않습니다. 그리고 % 1에 따옴표가 없으면 공백이 포함되지 않으므로 "% 1"을 (를) 사용하지 않으므로 "% 1"을 (를) 원하지 않을 것입니다. 따라서 % 1에 공백이 있으면 % 1 안에 따옴표가 있고 공백은 이미 유지됩니다.
나는 supercat의 의견에 비추어 아래를 건너 뛰었습니다. 그리고 위의 게시물에 더 추가했습니다.
예를 들어 []를 사용하면 공백이 유지되지 않기 때문에 따옴표는 []가 아닌 % 1 또는 A 또는-와 같은 문자가 가장 좋습니다.
C : \> if [dab] == [dab] echo sdf
현재로서는 예상치 못한 일이었습니다.
if "d a b"
그것이 효과가 있다고 말하십시오 . 그래서 if "%1"
같은 다른 문자 (들)보다 낫다 if [%1]
거나 a%1a
또는-%1
for %1 in (*.*) do @echo %1
배치 파일 내에서 % %를 사용하지만 배치 매개 변수 (btw는 배치 파일에만 있음)를 사용하는 명령문의 경우 명령 줄 에서 배치 파일에서 수행하는 것이 모호합니다. , % 2 etc