一部のコンピューターでは値の途中にスペースがあるため、一部の回答が示唆するように、すべてのスペースを削除しないでください。WMIC CSProduct Get Name の結果のリストを参照してください。
末尾に複数のスペースがあるだけでなく<CR>
、WMIC の Unicode 出力を ASCII に自動変換する際に発生するキャリッジ リターン ( ) も末尾に付いています。
<CR>
値を別の FOR /F ループに渡すことで、末尾を削除できます。これにより、幻の「空白」行 (実際には<CR>
) も削除されるため、IF ステートメントは不要になります。
~nx
その後、修飾子を使用して末尾のスペースを削除できます。これは、ファイル名がスペースまたはドットで終わることができず、OS によって自動的に削除されるためです。修飾子は、末尾のドットとスペースを削除して「ファイル名」を正規化します。\
値に、/
、*
、またはが含まれている場合?
、または文字の後に が続く場合、これは正しく機能しません:
。
for /F "skip=1 delims=" %%A in (
'wmic csproduct get name'
) do for /f "delims=" %%B in ("%%A") do set "model=%%~nxB"
もう 1 つのオプションは、wmz の CSV 形式の提案を使用することですが、末尾の<CR>
.
for /F "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name /format:csv'
) do for /f "delims=" %%B in ("%%A") do set "model=%%B"
編集 - 削除せずに wmz ソリューションが機能しているように見える理由<CR>
設定後の変数へのアクセス方法によっては、<CR>
問題が明らかでない場合があります。model
通常の展開ではすべてが削除されます<CR>
が、遅延展開では保持されます。
@echo off
setlocal enableDelayedExpansion
for /f "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name /format:csv'
) do set "model=%%A"
echo Normal expansion strips ^<CR^>: [%model%]
echo Delayed expansion preserves ^<CR^>: [!model!]
--- 出力 ---
Normal expansion strips <CR>: [LX4710-01]
] Delayed expansion preserves <CR>: [LX4710-01
<CR>
編集 -問題を回避する別の方法
CSV 形式を使用して、必要な値の後に表示される追加の属性を要求できます。目的の<CR>
トークンを解析するときに、余分な値とともに破棄されます。
for /f "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name^,vendor /format:csv'
) do set "model=%%A"