2015-05-06 69 views
1

我想用這個信息創建一個日誌文件: echo%time%;%date%;%computername%;「findstr/I」%% a「%MYFILES%\ Dir_ALL.txt」>>%computername%_File .csv如何在同一個「回聲」行中插入命令結果?

我該如何寫一些不會寫「findstr/I ...」但是這個命令的輸出?

我想在我的輸出文件的同一行中包含所有內容。

謝謝

回答

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關鍵字覆蓋它。

+0

謝謝你的回答。在嘗試解決方案時,如果%%包含空格,則結果會在我的csv文件中截斷。有沒有辦法創建一個臨時文件(因爲之前有另一個循環,我認爲這不會是最有效的方法)? – Isabelle

+0

您可以通過引用(不確定而無需進行一些測試)來解決該空間。使用臨時文件是因爲'set'命令無法讀取命令的輸出(最接近'/ p'選項,這似乎不是解決問題的方法)。 –

1

寫而不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%來獲得實際時間(使用延遲擴展當然)

+0

謝謝,我會嘗試。你能告訴我爲什麼我需要使用「!」而不是「%」,如果我在「FOR」聲明中? (對於我的noob問題抱歉)。 – Isabelle

+0

沒問題。整個'for'語句立即被解析,所以'%time%'不會改變(如果你循環一段時間,可能會有問題),每次都會計算'!time!'。參見[這裏](http://stackoverflow.com/a/26786046/2152082)或[這裏](http://stackoverflow.com/a/20854972/2152082)進行演示。 – Stephan

相關問題