我正在运行Windows 10,我有一个批处理文件,它将目录更改为所需的位置,还有一个Perl命令,它通过将Enabled = 1更改为Enabled = 0来编辑其中的所有文本文件,但我不知道如何让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
2条答案
按热度按时间svmlkihl1#
要处理子文件夹中的文件,以及(我认为)子子文件夹中的文件,等等,所有“条目”的列表(
glob
)需要拆分成文件和文件夹。编辑文件,并在子文件夹中重复该过程。这通常是递归完成的,但也有其他方法。这是一个小工作要做。当然,也有一些库用于递归遍历和处理。例如,核心File::Find(或File::Find::Rule)或Path::Iterator::Rule。但是,由于您还需要以简单的方式编辑每个文件,让我们看看一个更通用的实用程序Path::Tiny,它也有一些就地编辑文件的方法。
如果您坚持使用命令行程序(“one-liner”)
这里
visit
方法对给定文件夹下的每个条目执行sub { }
回调,并递归地继续(使用该选项)。我们跳过不是ASCII或UTF-8文件的条目,跳过的次数为-T
filetest。在回调内部,
edit_lines
按照其sub
中指定的方式处理文件的每一行;在这种情况下,运行问题中的正则表达式。一旦它完成了整个文件,它会用编辑后的版本替换原始文件。参见docs。du7egjpx2#
对于这一点,我认为它只能通过perl命令,而不是批处理命令来完成。
您可以查看here以获得更具体的解决方案