&この時点では予想外だった

&この時点では予想外だった

最初にいくつかの変数を設定するバッチ ファイルがあります。

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 に置き換えるなど)、期待どおりに動作しますが、バッチ ファイルを実行すると、最初の行は期待どおりに実行され、その後エラーが発生します。これはafter& was unexpected at this timeと関係があるのではないかと考えていますが、これが存在しないと、wmi クエリは必要な値を返しません。%.NET

答え1

「&は現時点では予期されていませんでした」というエラー

バッチファイルには 2 つの間違いがあります。

間違い1:

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

上記のコマンドでは、単一の%afterNETをエスケープする必要があります。%%代わりに以下を使用します。

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"

上記のコマンドの)前にがありません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 パラメータに対して特別な意味を持ちます。

パーセントを通常の文字として扱うには、パーセントを 2 倍にします。

%%

ソース構文


参考文献

関連情報