我想用這個信息創建一個日誌文件: 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'選項,這似乎不是解決問題的方法)。 –