事実:
for /F
loop:SKIP
は空白行を含むが、SKIP
後に完了し、FOR /F
が(反復しない)空の行を無視します。
wmic
動作:各出力行は、0x0D0A
(<CR><LF>
)ではなく、0x0D0D0A
(<CR><CR><LF>
)で終了します。 even 一見空です末尾の行にはの反復では空ではないと考えられるので、それまでは<CR>
が含まれています。
溶液#1:ネストされたループ
for /f "skip=1" %p in ('wmic cpu get loadpercentage') do @for %g in (%~p) do @echo %DATE%%TIME%,%g
はここfor
ループがloadpercentage
値を取得するために
%p
です。
%g
キャリッジリターンの値が返されます。
参照デイブベンハムのWMIC
and FOR /F
: A fix for the trailing <CR>
problem
溶液#2:代わりに、行全体の力空のトークン:
for /f "tokens=2 skip=1" %p in ('wmic cpu get deviceID^, loadpercentage^, Status') do @echo %DATE%%TIME%,%p
説明:有効で2番目のトークン
- は
loadpercentage
に解決されますue(そして、末尾の<CR>
は無視された第3のトークンに属します)。
<CR>
ラインは空ですので、for /F
ループはそれをスキップします。
編集:.csv
ファイルへoutput redirection完全でバッチファイルを追加しました。 %time%
値は私の現在のロケールで,
カンマが含まれてcsv
セパレータは単に;
セミコロンに変更されることに注意してください:
@ECHO OFF
SETLOCAL enableextensions disabledelayedexpansion
rem Solution #1
for /f "skip=1" %%p in ('
wmic cpu get loadpercentage
') do for %%g in (%%~p) do >>f38001801.csv echo %DATE%;%TIME%;%%g
>NUL 2>&1 timeout /T 2 /NOBREAK
rem Solution #2
for /f "tokens=2 skip=1" %%p in ('
wmic cpu get deviceID^, loadpercentage^, Status
') do >>s38001801.csv echo %DATE%;%TIME%;%%p
が出力確実性のために消去(
- 出力ファイルを、
- バッチファイルを3回実行;
- 出力ファイルを入力
):
==> del *38001801.csv
==> d:\bat\so\38001801.bat
==> d:\bat\so\38001801.bat
==> d:\bat\so\38001801.bat
==> type *38001801.csv
f38001801.csv
24.06.2016;13:41:57,53;1
24.06.2016;13:42:19,10;11
24.06.2016;13:42:31,08;4
s38001801.csv
24.06.2016;13:42:00,11;1
24.06.2016;13:42:22,12;2
24.06.2016;13:42:34,13;1
==>
おそらくWMICコマンドをプリント出力の3行? – ths
試してみてください: 'skip = 2' :) – Hackerman
@ drishti-ahuja質問に間違ったtahを使用しました。 'dos'の代わりに' cmd'を使います。 – Rishav