如何重命名子目录中的文件?

时间:2008-10-29 04:57:44

标签: windows file-io batch-rename

有没有办法在子目录中批量重命名文件?

例如:

在包含目录和子目录的文件夹中将*.html重命名为*.htm

15 个答案:

答案 0 :(得分:74)

Windows命令提示符:(如果在批处理文件中,将%x更改为%% x)

for /r %x in (*.html) do ren "%x" *.htm

这也适用于重命名文件的中间部分

for /r %x in (website*.html) do ren "%x" site*.htm

答案 1 :(得分:8)

对于Windows,这是我发现的最佳工具:

http://www.1-4a.com/rename/

它可以做任何事情并且有厨房水槽。

对于Linux,您可以使用大量的脚本语言和shell来帮助您,就像之前的答案一样。

答案 2 :(得分:6)

find . -regex ".*html$" | while read line;
 do 
    A=`basename ${line} | sed 's/html$/htm/g'`;
    B=`dirname ${line}`;
    mv ${line} "${B}/${A}";
 done

答案 3 :(得分:5)

在python中

import os

target_dir = "."

for path, dirs, files in os.walk(target_dir):
    for file in files:
        filename, ext = os.path.splitext(file)
        new_file = filename + ".htm"

        if ext == '.html':
            old_filepath = os.path.join(path, file)
            new_filepath = os.path.join(path, new_file)
            os.rename(old_filepath, new_filepath)

答案 4 :(得分:3)

在Bash中,您可以执行以下操作:

for x in $(find . -name \*.html); do
  mv $x $(echo "$x" | sed 's/\.html$/.htm/')
done

答案 5 :(得分:2)

我确信这是一种更优雅的方式,但这是我头脑中的第一件事:

for f in $(find . -type f -name '*.html'); do 
    mv $f $(echo "$f" | sed 's/html$/htm/')
done

答案 6 :(得分:2)

如果您有forfiles(它附带Windows XP和2003以及我认为的新内容),您可以运行:

forfiles / S / M * .HTM / C“cmd / c ren @file * .HTML”

答案 7 :(得分:1)

在Linux上,您可以使用“rename”命令批量重命名文件。

答案 8 :(得分:1)

In bash use command rename :)

 rename 's/\.htm$/.html/' *.htm

 # or

 find . -name '*.txt' -print0 | xargs -0 rename 's/.txt$/.xml/'

 #Obs1: Above I use regex \. --> literal '.'  and  $ --> end of line
 #Obs2: Use find -maxdepht 'value' for determine how recursive is
 #Obs3: Use -print0 to avoid 'names spaces asdfa' crash!

答案 9 :(得分:1)

Total Commander这是一个文件管理器应用,可让您列出&选择其目录中的所有文件sub-dirs,然后你可以对它们进行任何总指挥官操作。其中之一是:多重命名所选文件。

答案 10 :(得分:0)

Linux上的AWK。对于第一个目录,这是你的答案...通过在dir_path上递归调用awk来推断,也许是通过编写另一个awk来写下这个精确的awk ......等等。

ls dir_path/. | awk -F"." '{print "mv file_name/"$0" dir_path/"$1".new_extension"}' |csh

答案 11 :(得分:0)

对于Windows,我使用基于正则表达式的重命名和Drag& Drop支持进行了convenient litte VBScript solution。如果你愿意,试一试 - 把它放在一个vbs文件中,然后在资源管理器中放下你的文件夹。

答案 12 :(得分:0)

在Windows上,The Rename做得非常好。免费软件,但不是开源软件。

答案 13 :(得分:0)

在Windows上,您可以在 https://filerenamer.codeplex.com 中找到开源简单C#批量文件重命名应用程序,并使用简单的 Excel文件 。 给这个应用程序提供一个包含两列源和目标的excel文件,它就完成了。

答案 14 :(得分:0)

在Unix上,您可以使用rnm

rnm -rs '/\.html$/.htm/' -fo -dp -1 *

rnm -ns '/n/.htm' -ss '\.html$' -fo -dp -1 *

说明:

  1. -ns:名称字符串(新名称)。 /n/是一个名称字符串规则,可扩展为不带扩展名的文件名。
  2. -ss:搜索字符串(正则表达式)。搜索匹配的文件。
  3. -rs:替换/search_regex/replace_part/modifier
  4. 形式的字符串
  5. -fo:仅文件模式
  6. -dp:目录深度(-1表示无限制)。