我使用
Windows批处理命令将特定时间的CPU负载保存到名为cpu.csv的文件中.我使用以下命令
@for /f "skip=1" %p in ('wmic cpu get loadpercentage') do @echo %DATE%%TIME%,%p>>cpu.csv
哪个工作正常,但如下所示,提供日期和时间的双重输入
4,Thu 06/23/201613:59:09.42
,Thu 06/23/201613:59:09.42
这意味着只有在需要时才打印一次负载百分比,但是日期打印两次.
最佳答案 事实:
> for /F
loop:SKIP包含空行,但在SKIP完成后,FOR / F忽略(不迭代)空行;
> wmic行为:每个输出行以0x0D0D0A(< CR>< CR>< LF>)而不是公共0x0D0A(< CR>< LF>)结束;甚至看似空的尾随行包含< CR>到目前为止,在for / F迭代中它不被认为是空的.
解决方案#1:嵌套循环
for /f "skip=1" %p in ('wmic cpu get loadpercentage') do @for %g in (%~p) do @echo %DATE%%TIME%,%g
这里的for循环是
>%p来检索loadpercentage值;
>%g删除返回值中的结束回车符.
见Dave Benham的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
说明:第二个令牌
>在有效行中解析为loadpercentage值(并且尾随< CR>现在属于忽略的第3个令牌);
>< CR> line为空,以便for / F循环将跳过它.
编辑:将包含完整output redirection的批处理文件添加到.csv文件中.请注意csv分隔符更改为;分号仅作为%time%value包含,逗号在我当前的语言环境中:
@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
输出(
>输出文件为了确定而被删除;
>批处理文件运行三次;
>输出文件类型
):
==> 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
==>