我使用windows batch命令将特定时间的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
这意味着只有在需要时才打印一次负载百分比,但是日期打印了两次。
答案 0 :(得分:1)
事实:
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>
循环跳过它。 修改:将一个包含完整output redirection的批处理文件添加到for /F
文件中。请注意,.csv
分隔符更改为csv
分号,因为;
值包含我当前语言环境中的%time%
逗号:
,
输出(
):
@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
答案 1 :(得分:0)
这是完美的批处理文件(如果直接复制并粘贴在cmd中,则无效)
@echo off
for /f "skip=1" %%p in ('wmic cpu get loadpercentage') do (
echo %DATE%%TIME%, %%p>>cpu.csv
goto :break
)
:break
如有必要,请使用pause
。