我想用这个信息创建一个日志文件: echo%time%;%date%;%computername%;" findstr / I" %% a" %MYFILES%\ Dir_ALL.txt" >> %计算机%_File.csv
我怎样才能写出不会写的内容" findstr / I ..."但是这个命令的输出?
我希望输出文件中的所有内容都在同一行。
谢谢
答案 0 :(得分:1)
您必须使用命令结果设置变量。这在 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
关键字覆盖它。
答案 1 :(得分:1)
写一行没有换行的set /p
,然后是第二行:
<nul set /p .=%time%;%date%;%computername%;>>%computername%_File.csv
findstr /I "%%a" %MYFILES%\Dir_ALL.txt>>%computername%_File.csv
注意:由于我猜%%a
,您在for
语句中使用此代码片段。我建议使用!time!
代替%time%
来获取实际时间(当然使用延迟扩展)