2014-03-02 82 views
0

這是從Batch file to list txt and mp3 files - using the list extract the same lines from the text files 基本上我創建了一個文本文件列表,然後使用此列表在文本文件中找到一行稱爲「JobNotes =」和將其輸出到一個新文件中,並以不同方式顯示作業註釋中的信息。 我已修改代碼以在文件列表上使用findstr(文件名在文件text_list中)。它會創建第一個輸出文件,但會錯誤地顯示其他輸出文件。Repl.bat找到並替換文件列表中的文本

這是代碼

for /f "delims=" %%f in (%text_list%) do (
FINDSTR /l "^Job Notes=" "%%f" |repl.bat ".*=(.*) (\d+) (\d+\/\d+\/\d+) \d+:\d+:\d+ .*" "Name=$1\r\nFile Number=$2\r\nDate=$3" x >"C:\replacer\move\%%f" 
              ) 

這是拳頭輸出文件(其被正確地顯示)。

Name=John Smith 
File Number=123456 
Date=22/11/2013 

然後所有其他輸出文件diaply像這樣(這是它在輸入文件中顯示的方式)。

Job Notes=Jane Smith 234567 22/11/2013 1:22:33 PM 654321 

感謝您的幫助

回答

1

首先,你FINDSTR一個不相關的問題 - 它不工作,你打算。您正在尋找以Job Notes=開頭的行,但它正在尋找包含字符串^JobNotes=的任何行。除非使用/C:"literal search string"選項,否則FINDSTR會在空格處斷開字符串。你的FINDSTR代碼顯然給出了正確的結果,因爲只有想要的行包含字符串Notes=,但你可能不想依賴它。

您可以通過使用校正文字搜索字符串修復:

FINDSTR /bc:"Job Notes:" ... 

或更正正則表達式:

FINDSTR /rc:"^Job Notes:" ... 

關於你的實際問題 - REPL.BAT將只修改匹配的行提供的搜索字符串;無與倫比的線路保持原樣。您可以通過追加A選項(僅更改行)來消除不匹配的行。但是這隻會隱藏你的情況。

解決方案是修改正則表達式搜索字符串,使其正確匹配所有輸入行。

我懷疑你的實際數據不包含Job Notes=Jane Smith 234567 22/11/2013 1:22:33 PM 654321,因爲該行已被現有代碼正確修改。

爲了讓任何人能夠幫助您,您必須對每行的格式(包括所有變體)更加精確。請張貼一些不工作的示例行,以及一些行。不要改變任何東西,除非修改名稱中的字母,並且可能爭奪數字 - 但不要改變任何位置的字符數量或類型。

另一點 - FINDSTR命令可能可以用正確的REPL.BAT正則表達式和A選項的添加刪除。

+0

findstr語法是我在鏈接線程上的錯誤。 – foxidrive

+0

發現它.....在輸入文件中更改...一秒鐘另一個不....感謝您的幫助 – user3297071