& 이때는 예상치 못한 일이었습니다

& 이때는 예상치 못한 일이었습니다

처음에 일부 변수를 설정해야 하는 배치 파일이 있습니다.

for /f %%A in ('wmic os get osarchitecture ^| find /i "bit"') do set "OSARCH=%%A"
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%'" get name') do set "DNVER=%%B"
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion' do set "IEFULLVER=%%C"
set IEVER=%IEFULLVER:~0,4%

CMD 프롬프트에서 이를 실행하면(%A를 %%A로 대체) 예상대로 작동하지만 배치 파일을 실행하면 첫 번째 줄이 예상대로 실행되고 오류가 발생합니다 & was unexpected at this time. 나는 그것이 %after 와 관련이 있을 것이라고 생각하고 있지만 .NET거기에 있어야 합니다. 그렇지 않으면 wmi 쿼리가 필요한 값을 반환하지 않습니다.

답변1

'이번에는 예상치 못한 일이었습니다.' 오류

배치 파일에 두 가지 실수가 있습니다.

실수 1:

for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%'" get name') do set "DNVER=%%B"

%위 명령은 이스케이프된 후 단일을 가져야 합니다 NET. 대신 사용하세요 %%:

for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%%'" get name') do set "DNVER=%%B"

실수 2:

for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion' do set "IEFULLVER=%%C"

위 명령에는 )before 가 누락되었습니다 do. 그것은해야한다:

for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion') do set "IEFULLVER=%%C"

작업 배치 파일(test.cmd):

@echo off
setlocal EnableDelayedExpansion
for /f %%A in ('wmic os get osarchitecture ^| find /i "bit"') do set "OSARCH=%%A"
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%%'" get name') do set "DNVER=%%B"
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion') do set "IEFULLVER=%%C"
echo %OSARCH%
echo %DNVER%
echo %IEFULLVER%
endlocal

예제 출력:

F:\test>test
64-bit
4.5.2
11.0.9600.17691

이스케이프 퍼센트

%문자는 명령줄 매개변수와 FOR 매개변수에 대해 특별한 의미를 갖습니다.

백분율을 일반 문자로 처리하려면 두 배로 사용하십시오.

%%

원천통사론


추가 자료

관련 정보