我正在運行 Windows 10,并且我有一個將目錄更改為所需位置的批處理檔案和一個通過將 Enabled = 1 更改為 Enabled = 0 來編輯其中所有文本檔案的 perl 命令,但我不知道如何使 perl 命令檢查子檔案夾。
@echo off
timeout 1 >nul 2>&1
cd /d D:
timeout 1 >nul 2>&1
cd "D:\MySettings"
timeout 1 >nul 2>&1
perl -wE "@ARGV = glob qq($ARGV[0]); $^I = qq(); while (<>) { s/Enabled =\K.*/ \x220\x22/g; print }" *.txt
Pause
uj5u.com熱心網友回復:
要處理子檔案夾中的檔案,以及(我認為)子檔案夾等中的檔案,所有“條目”(glob
)的串列需要拆分為檔案和檔案夾。編輯檔案并在子檔案夾中重復該程序。這通常以遞回方式完成,但還有其他方法。這是一個小任務。
當然,還有用于遞回遍歷和處理的庫。例如核心File::Find(或File::Find::Rule)或Path::Iterator::Rule。但是由于您還需要以簡單的方式編輯每個檔案,讓我們看一下更通用的實用程式Path::Tiny,它也有一些就地編輯檔案的方法。
如果您堅持使用命令列程式(“one-liner”)
perl -MPath::Tiny -we"
path(qq(.))->visit( sub {
my ($entry, $state) = @_;
return if not -T;
path($entry)->edit_lines( sub { s/.../.../g } )
},
{ recurse => 1 }
)"
在這里,該visit
方法對給定檔案夾下的每個條目執行sub { }
回呼,并遞回地繼續(使用該選項)。-T
我們通過filetest跳過不是 ASCII 或 UTF-8 檔案的條目。
在回呼內部,按照;edit_lines
中指定的方式處理檔案的每一行 sub
在這種情況下,從問題中運行正則運算式。完成整個檔案后,它將用編輯后的版本替換原始檔案。請參閱檔案。
uj5u.com熱心網友回復:
為此,我認為它只能通過 perl 命令完成,而不是批處理命令。
您可以在此處查看更具體的解決方案
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506248.html
上一篇:從目錄中的多個檔案中搜索多行字串