&此時卻出乎意料

&此時卻出乎意料

我有一個批次文件,應該在開始時設定一些變數。

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

“& 此時出現意外”錯誤

您的批次文件中有兩個錯誤。

錯誤一:

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 參數具有特殊意義。

要將百分比視為常規字符,請將其加倍:

%%

來源句法


進一步閱讀

相關內容