![&この時点では予想外だった](https://rvso.com/image/1497097/%EF%BC%86%E3%81%93%E3%81%AE%E6%99%82%E7%82%B9%E3%81%A7%E3%81%AF%E4%BA%88%E6%83%B3%E5%A4%96%E3%81%A0%E3%81%A3%E3%81%9F.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 に置き換えるなど)、期待どおりに動作しますが、バッチ ファイルを実行すると、最初の行は期待どおりに実行され、その後エラーが発生します。これは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 倍にします。
%%
ソース構文
参考文献
- Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
- 構文- 文字、区切り文字、引用符をエスケープします。
- wmic- Windows Management Instrumentation コマンド。