2012-02-07 47 views
1

我目前正在使用帶有SET命令的批處理文件從一組名爲link.2011*.log的日誌文件中執行findstr,但在嘗試回顯日誌文件時遇到問題。批量使用集

代碼:

... 
set /P log=.\DIR\%DEV%\link.2011*.log 
findstr /L /C:"matrix" %log% 
if errorlevel 1 (
echo %DEV% --- matrix not found >> .\output.txt 
) else (
echo %DEV% --- matrix found %log% >> .\output.txt 
:END 

output.txt不打印%dev%變量,但%log%可變輸出整個字符串.\DIR\%DEV%\link.2011*.log

我想代碼輸出的實際link.2011xxxxxxxx.log而不是字符串。

任何幫助表示讚賞。

謝謝。

+1

我不明白'設置/ P日誌=。\ DIR \%DEV%\ link.2011 * .log'應該這樣做。在我的系統上,將'。\ DIR \%DEV%\ link.2011 * .log'作爲「提示符」寫入控制檯,如果用戶鍵入響應的內容,則將其保存爲變量'%log% '。有什麼系統可以完成不同的事情嗎? – ruakh 2012-02-07 18:57:20

+0

@ruakh - 我的想法是使用set命令從目錄中選擇每個日誌文件,並使用%log%變量來爲特定字符串findstr。不知道這是否回答你的問題。如果你正在通過命令窗口尋找用戶交互,那麼我想我可能已經看到它在某個地方在stackoverflow中,只是搜索它。 – redsu 2012-02-08 16:07:04

回答

0

如果使用/M開關與FINDSTR命令,輸出將只顯示在比賽已經發生了文件(S)的姓名(或名稱):如果你想輸出

FINDSTR /M /L /C:"matrix" "%log%" >> .\output.txt 

是完全一樣在你的示例腳本,你可以試試下面的辦法:

FINDSTR /M /L /C:"matrix" "%log%" > .\tmpoutput.txt && (
    ECHO %DEV% --- matrix found: >> .\output.txt 
) || (
    ECHO %DEV% --- matrix not found >> .\output.txt 
) 
TYPE .\tmpoutput.txt >> .\output.txt 
DEL .\tmpoutput.txt 

也就是說,該字符串的FINDSTR命令搜索和文件列表輸出到一個臨時文件。如果搜索成功,則matrix found消息將打印到.\output.txt,否則matrix not found會執行此操作。

之後,.\tmpoutput.txt的內容被附加到output.txt。 (如果沒有匹配,你可以不用擔心這一步的完成,因爲在這種情況下臨時文件將是空的,所以它不會影響output.txt的內容。)

+0

謝謝安德烈。非常感激。 – redsu 2012-02-08 12:26:13

+0

又回來了,我還有一個關於腳本的問題。例如,我在。\ TEMP \ *。logs中有一個* .logs的列表,我想每個日誌都找到它的「矩陣」。但是我想要output.txt顯示字符串矩陣(如果找到)以及它找到的日誌名稱。再次感謝Andriy。 – redsu 2012-02-08 14:52:44

+0

@redshogun:如果沒有'/ M','FINDSTR'顯示文件名和匹配發生的實際行。格式是:'filename:line'。只需單獨嘗試命令即可自行查看。 (你也會看到文件名被突出顯示,如'FINDSTR'本身所示,但突出顯示在重定向輸出後被取消。) – 2012-02-08 15:11:30