![&此時卻出乎意料](https://rvso.com/image/1497097/%26%E6%AD%A4%E6%99%82%E5%8D%BB%E5%87%BA%E4%B9%8E%E6%84%8F%E6%96%99.png)
我有一個批次文件,應該在開始時設定一些變數。
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 參數具有特殊意義。要將百分比視為常規字符,請將其加倍:
%%
來源句法
進一步閱讀
- Windows CMD 命令列的 AZ 索引- 與 Windows cmd 行相關的所有內容的絕佳參考。
- 句法- 轉義字元、分隔符號和引號。
- 沃米克- Windows 管理規範命令。