gpt4 book ai didi

windows - 我怎样才能让这个 perl 命令也检查子文件夹?

转载 作者:行者123 更新时间:2023-12-02 18:05:50 25 4
gpt4 key购买 nike

我正在运行 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

最佳答案

为了处理子文件夹中的文件,以及(我推测)子子文件夹等中的文件,所有“条目”(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 { } 回调,并递归地执行(使用该选项)。我们跳过不是 ASCII 或 UTF-8 文件的条目,通过 -T filetest .

在回调中,edit_lines 按照其 sub 中指定的方式处理文件的每一行;在这种情况下,请运行问题中的正则表达式。一旦完成整个文件,它就会用编辑后的版本替换原始文件。请参阅文档。

关于windows - 我怎样才能让这个 perl 命令也检查子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73273888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com