2011-05-04 61 views
1

我有窗戶bat文件,(使用的ActivePerl)在Windows使用perl古怪

@echo off 
perl -p -e 's/DIV\[/div\[/g' orginal.txt > output.txt 
perl -p -e 'rename("output.txt", "orginal.txt")'; 
... 

運行.bat文件,我只是不能得到它才能正常運行..

Can't open ;: No such file or directory, <> line 12248. 
Can't find string terminator "'" anywhere before EOF at -e line 1. 

不知道我在做什麼錯誤..

回答

4

你不能用單引號在Windows中封裝Perl代碼。因此,您需要跳過雙引號或查找其他選項,例如qq(...)

perl -pe "s/DIV\[/div\[/g" original.txt > output.txt 
perl -pe "rename(qq(output.txt), qq/original.txt/)" 

注意,在這種情況下,參數rename可以簡單地rename('a.txt', 'b.txt')因爲它們是文字,並且不需要變量插值。

1

您應該使用雙引號引用Windows cmd下的程序文本。在你的例子中,你可以swiztch雙引號和單引號。如果您確實需要在perl文本中使用雙引號,請改用qq {....}。

1

其他海報是正確的:windows需要雙引號for -e腳本perl,這往往是事情搞砸了。有一兩件事可以做,但:使用-i開關,像這樣:

@echo off 
perl -pi.bak -we "s/DIV\[/div\[/g" original.txt 

-i.bak交換機將在地方編輯文件 - 無需重命名 - 這將存儲的文件的備份「original.txt.bak」。如果您不想備份,請刪除「.bak」部分,然後使用-pi

+0

並通過Perl刪除.bak文件? – user349418 2011-05-04 23:52:41

+1

好吧,如果你想在同一個腳本中刪除它,只是不要將它添加到第一個地方。只需使用'perl -pi -we'。在perl中,你可以使用'unlink'original.txt.bak''。在批處理文件中,使用'del original.txt.bak''會更簡單' – TLP 2011-05-05 00:10:54

+0

我注意到了這個錯誤,不知道它有多容易..但似乎將文件轉換爲dos,源文件是unix(我想保留) – user349418 2011-05-10 07:33:07