1

我正在寻找一个脚本(Perl、Python 或批处理都可以),它将通过指定的文件树并重命名所有子文件。

例如,Folder1>File1.anytype变成Folder1>Folder1File1.anytype

谢谢

4

5 回答 5

2

您提到了一个批处理文件,这可能意味着您在 Windows 上(我假设您指的是 .bat 文件)。如果您使用的是 unix 系统,请试一试:

find . -mindepth 2 -type f -exec sh -c "mv {} \`dirname {}\`/\`dirname {} | sed 's/^\.//' | sed 's/\///g'\`\`basename {}\`" \;

或者,这个 Python 3 程序可以解决问题(也应该在 Windows 上工作......):

#!/usr/bin/env python3.0

import os
import sys 

def raise_error(e):
    raise e

def full_split(path):
    head, tail = os.path.split(path)

    if head:
        return full_split(head) + [tail]

    return [tail]

def main(args):
    if len(args) != 1:
         print("Please specify one target directory", file=sys.stderr)
         sys.exit(1)

    os.chdir(args[0])
    for dirpath, _, filenames in os.walk('.', onerror=raise_error):
        for f in filenames:
            old = os.path.join(dirpath, f)
            new = os.path.join(dirpath, ''.join(full_split(dirpath[2:]) + [f]))
            os.rename(old, new)

if __name__ == '__main__':
    main(sys.argv[1:])

之前的目录布局:

.:
ABC 定义

./ABC:
Foo2.bar Foo.bar

./定义:
Baz2.quux Baz.quux Ghi

./Def/Ghi:
Bar2.foo 酒吧.foo

之后的目录布局:

.:
ABC 定义

./ABC:
AbcFoo2.bar AbcFoo2.bar

./定义:
DefBaz2.quux DefBaz.quux Ghi

./Def/Ghi:
DefGhiBar2.foo DefGhiBar.foo
于 2009-04-05T15:37:08.357 回答
1

最好的批处理重命名器是mmv

另请参阅如何进行批量重命名?

于 2009-04-06T08:42:24.273 回答
0

您可以尝试批量重命名:http: //batchrename.foryoursoft.com/

于 2009-04-05T17:54:55.390 回答
0

您可以通过在命令行中使用嵌套的 for 循环来实现此类重命名。虽然有点难看:

for /D %d in (*) do for %f in ("%d\*.*") do move "%f" "%d\%~nd%~nf"

如果您希望将上述命令放在批处理脚本中,请重复每个 % 字符一次。

for /D %%d in (*) do for %%f in ("%%d\*.*") do move "%%f" "%%d\%%~nd%%~nf"

要了解上述命令的作用,请咨询FOR /?命令行。

我觉得现在 Batch 太神秘了,我需要以某种方式保存 BAT 的智慧...... :-)

我在开玩笑:-).. 但是命令确实有效,我已经尝试过了。

于 2009-04-09T19:01:15.560 回答
0

在 Perl 中使用File::FindFile::Copy非常简单

于 2009-04-09T19:18:11.277 回答