【问题标题】:Using Perl to rename files in windows使用 Perl 重命名 windows 中的文件
【发布时间】:2016-08-17 13:59:59
【问题描述】:

我的程序需要重命名以这样结尾的文件

文件(1) 文件(2) 文件(3)

我希望他们重命名为这个

文件_1 文件_2 文件_3

我在 c++ 中尝试过这个,但似乎效率不高。我认为 Perl 会很适合它,但不知道从哪里开始。

【问题讨论】:

  • 那些是奇怪的文件名:Windows 文件名几乎总是有一个文件类型你确定它们不是file(1).txtfile(2).txtfile(3).txt 等或类似的东西吗?

标签: windows perl


【解决方案1】:

你的问题是从哪里开始?所以从Here开始perl

要重命名文件,请查看Here

要打开目录和读取,请查看here

然后也在这里查看glob

【讨论】:

    【解决方案2】:
    #!/usr/bin/perl
    use strict;
    use warnings;
    
    my $dir =       'folder';
    my @dir =       ();
    
    opendir(DIR, $dir);
    @dir    =       readdir(DIR);
    closedir(DIR);
    
    foreach my $file (@dir) {
        my $f=$file;
        $f =~ s/\(/_/;
        $f =~ s/\)//;
        rename "$dir/$file", "$dir/$f";
    }
    

    s/\(/_/ 中的\( 匹配文件名file(1) 中的“(”并替换为“_”,因此$f =~ s/\(/_/; 使$f 变为file_1)。@987654330 中的\) @ 匹配文件名file_1) 中的“)”并替换为“”(无),因此$f =~ s/\)//; 使$f 变为file_1

    【讨论】:

    • 为保留原始数据,请使用非破坏性修饰符。 See here
    • 我可能会这样做 $f =~ s/((\d+))/_$1/g;反而。在一行中完成。
    • 我不确定谁投了反对票。感谢大家的投入,我会仔细研究这个,直到我能更好地阅读它。顺便说一句,这不是一项任务,而是我个人的兴趣/用途。
    • $f =~ s/((\d+))/_$1/g;# 所以我相信这一行说:用下划线和捕获变量替换括号中的一个或多个数字$1 是括号中的数字。并且 g 允许全局匹配,我不确定我们现在为什么需要。
    • 另外我正在测试这个并且 testfile(1) 变成了 testfile(_1) 但这不会因为正则表达式中的双括号。我拿走了一对括号,我是否需要使用 ((d+)) 或其他东西似乎没有什么区别?编辑:我不能把 \'s 放在我的 cmets 的括号后面
    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 2022-08-18
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多