我想用这个信息创建一个日志文件: echo%time%;%date%;%computername%;“findstr/I”%% a“%MYFILES%\ Dir_ALL.txt”>>%computername%_File .csv如何在同一个“回声”行中插入命令结果?
我该如何写一些不会写“findstr/I ...”但是这个命令的输出?
我想在我的输出文件的同一行中包含所有内容。
谢谢
我想用这个信息创建一个日志文件: echo%time%;%date%;%computername%;“findstr/I”%% a“%MYFILES%\ Dir_ALL.txt”>>%computername%_File .csv如何在同一个“回声”行中插入命令结果?
我该如何写一些不会写“findstr/I ...”但是这个命令的输出?
我想在我的输出文件的同一行中包含所有内容。
谢谢
您必须使用命令结果设置一个变量。这在Windows Batch help in setting a variable from command output中被回答,使用虚拟for循环,其循环变量根据文件的内容设置。
这将是这样的:
findstr /I "%%a" %MYFILES%\Dir_ALL.txt >%temp%\temp.txt
for /f %%i in (%temp%\temp.txt) do echo %time%;%date%;%computername%;%%i >> %computername%_File.csv
del %temp%\temp.txt
有一个限制,这个:变量不能包含多行。但是,将脚本片段改写为循环可能也会解决该问题。
MSDN article on set
显示了一些额外的功能,您可以使用它来控制如何解析文件中的数据。通常它将结果分析为由空格分隔的令牌。但是您可以使用delims
关键字覆盖它。
写而不set /p
换行线,接着是第二行:
<nul set /p .=%time%;%date%;%computername%;>>%computername%_File.csv
findstr /I "%%a" %MYFILES%\Dir_ALL.txt>>%computername%_File.csv
注意:由于%%a
我猜,您使用的是for
声明这里面codefragment。我建议使用!time!
而不是%time%
来获得实际时间(使用延迟扩展当然)
谢谢你的回答。在尝试解决方案时,如果%%包含空格,则结果会在我的csv文件中截断。有没有办法创建一个临时文件(因为之前有另一个循环,我认为这不会是最有效的方法)? – Isabelle
您可以通过引用(不确定而无需进行一些测试)来解决该空间。使用临时文件是因为'set'命令无法读取命令的输出(最接近'/ p'选项,这似乎不是解决问题的方法)。 –