0

バッチ ファイル経由でコンピューター システム モデルの種類を取得しようとしています。このために、私はこのスクリプトを作成しました:

systeminfo | find "System Model" > %temp%\TEMPSYSINFO.txt
for /F "tokens=2 delims=:" %%a in (%temp%\TEMPSYSINFO.txt) do set SYSMODEL=%%a
del %temp%\TEMPSYSINFO.txt
set SYSMODEL=%SYSMODEL:~1%
echo %SYSMODEL% >%temp%\SYSMODEL.txt
del %temp%\SYSMODEL.txt
set "Line1=*** System Model: %SYSMODEL%"
echo %Line1%

しかし、実行すると余分なスペースができます:

*** System Model:              OptiPlex 9010

どうすれば修正できますか?

4

3 に答える 3

1

あなたが使用することができます

for /F "tokens=2* delims=: " %%a in (%temp%\TEMPSYSINFO.txt) do set SYSMODEL=%%b

つまり、区切り文字 COLON または SPACE を使用して、テキストをトークン 3 にしますが、テキストのように? コロンまたはスペースを含めます。これは、「トークン 2 %%a %%bの*後の区切り文字に続く行の残りの部分」を意味します the first-mentioned token (2) is the one that gets assigned to, the next highest (*) to

これで、コーディングすることもできます

for /F "tokens=2* delims=: " %%a in (
 'systeminfo 2^>nul ^| find "System Model" '
 ) do set SYSMODEL=%%b

つまり、TEMPSYSINFO.txt ファイルは必要ありません。これにより、一重引用符で囲まれたコマンド ラインが実行されます。特殊文字は>、FOR に関する限り、それらを「エスケープ」する (特別な意味をオフにする) ために|キャレット ( ) が必要です(それらは FOR ではなく に属します)。^quoted command

2>nul は、SYSTEMINFO 進行状況テキストを抑制します。

そして、この線を破ることは非常に正当です - どこでそれを行うのか正確に注意する必要があります. コードをより読みやすくします。

于 2013-04-12T14:21:14.977 に答える
0

価値があるので、これを試してみたところ、すべてのダブルスペースが何もないものに置き換えられ、
: echo =%SYSMODEL%=(
=my sysmodel =末尾のスペースが1つだけ) :)

set SYSMODEL=%SYSMODEL: =%

編集
したがって、ピーターの優れた提案を使用して、パイプされたコマンドを に入れましたFOR /F。これは以前に試しましたが、 :)|の代わりにプレーンでスタックしなくなりました^|

for /F "tokens=2 delims=:" %%a in ('systeminfo 2^>nul ^| find "System Model"') do set SYSMODEL=%%a
set SYSMODEL=%SYSMODEL:  =%

EDIT 2 rojoの答えは素晴らしいですが、まだ末尾のスペースが残っているので、まだトリック
を使用してしまいました%var: =%

for /f "tokens=2 delims==" %%a in ('wmic computersystem get model /format:list') do set SYSMODEL=%%a
set SYSMODEL=%SYSMODEL:  =%
echo =%SYSMODEL%=
于 2013-04-12T14:20:00.707 に答える