최근에 .cmd 파일에 다음과 유사한 줄을 포함했습니다.
for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"
원래는 % f 만 사용했고 명령 줄에서 실행할 때는 제대로 작동하지만 파일을 통해 실행할 때는 제대로 작동하지 않습니다. %% f로 전환했을 때 파일에서 작동했습니다. 차이점이 무엇인지 궁금합니다.
답변
(자세한 설명은 보관 된 Microsoft KB 문서 에서 찾을 수 있습니다 .)
알아야 할 세 가지 :
- 퍼센트 기호는 명령 줄 매개 변수를 나타 내기 위해 배치 파일에 사용되는 :
%1
,%2
, … -
사이에 문자가있는 두 개의 퍼센트 기호는 변수로 해석됩니다.
echo %myvar%
- (배치 파일에서) 사이에 아무것도 없는 두 퍼센트 기호 는 명령 (배치 파일이 아님)에서 단일 퍼센트 기호처럼 처리됩니다.
%%f
그 이유는 무엇입니까?
예를 들어 (간단한) 명령 줄을 실행하면
FOR /f %f in ('dir /b .') DO somecommand %f
배치 파일에서 규칙 2 는
%f in ('dir /b .') DO somecommand %
변수로. 이를 방지하려면 규칙 3 을 적용 %
하고 두 번째 로을 이스케이프해야합니다 %
.
FOR /f %%f in ('dir /b .') DO somecommand %%f
답변
DOS에서는 명령 줄에서 환경 변수를 사용할 수 없었고, %
기호를 구분 기호로 사용한 배치 파일에서만 사용할 수있었습니다 . %
예를 들어 echo
명령문과 같이 배치 파일에서 리터럴 기호 를 원하면 두 배로 표시해야합니다.
이것은 명령 줄에서 환경 변수를 허용하는 Windows NT로 이어졌지만 이전 버전과의 호환성을 위해 여전히 %
.cmd 파일에서 기호 를 두 배로 늘려야합니다.