2011-03-03 63 views
1

我要尋找以下一個簡單的批處理的解決方案替換每次出現:查找字符串,並用不同的字符串

在一些我想要替換爲另一個字符串的文件。可以用Notepad ++來做到這一點。但是,每個新字符串必須是唯一的,從新字符串列表中讀取。

所以,如果 'ABC' 在一些文件時,我有新的字符串列表,更換這樣說:

ABC - >艾力克斯
ABC - >本
ABC - >克里斯
ABC - >戴夫

我可以有新的字符串txt文件的閱讀。

希望有人對我有一個解決方案!

非常感謝, 倫納特

+0

A *簡單*批處理解決這樣一個問題?幾乎不可能。然而,最終它可能僅僅取決於你發現的簡單。 – 2011-03-03 17:16:31

+0

@Andriy:只有當您的「批」的定義是「.bat文件」... – grawity 2011-03-03 18:51:51

回答

2

請問一個Perl腳本的工作?

my @words = qw(alex ben chris dave ...); 

while (<>) { 
    s/abc/shift @words/ge; 
    print; 
} 

如果你想要的單詞列表循環: 「!」

my @words = qw(...); 
my $i = 0; 

while (<>) { 
    # I know I should have written this in a more readable way... 
    s{abc}{$words[$i++] // $words[$i=0]}ge; 
    print; 
} 
+0

在's/x/y/z'中,*'x' *是一個正則表達式,*'y' *是替換文本和*'z' *是標誌。如果指定了「'e'」標誌,則替換文本被視爲可執行的Perl代碼。 – grawity 2011-03-03 15:06:47

1

或者作爲批處理腳本

@echo off 
setlocal Disabledelayedexpansion 
set "wordlist=alex ben chris dave" 
for /F "tokens=* delims=" %%a in (myFile.txt) do (
    set "line=%%a" 
    setlocal Enabledelayedexpansion 
    for /F "tokens=1,*" %%b in ("!wordlist!") do (
     set "newline=!line:abc=%%b!" 
     (echo(!newline!) 
     if !newline! NEQ !line! (
      endlocal 
      set "wordlist=%%c" 
     ) ELSE ( 
      endlocal 
     ) 
    ) 
) 

編輯更改爲安全的變體

+0

不幸的是,即使在'set「line = %% a」'中也會發生延遲擴展,導致源文本中看起來像'!variable!'的所有內容都被擴展。 (在'for'循環中移動'setlocal'似乎可以修復它。) – grawity 2011-03-04 14:35:01

+0

@grawity:好的,你有我了,我只展示了一個簡單的解決方案,而不是一個完美的解決方案,完美的解決方案要複雜得多 – jeb 2011-03-04 15:47:53

0

試圖找到一個sed可執行的Windows支持的-i--inline)開關,你的工作將成爲一個蹣跚學步的任務!