batch-file – 用于在windows命令中循环打印日期两次

我使用
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

==>
点赞