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

问题描述 投票:39回答:15

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

例如:

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

windows file-io batch-rename
15个回答
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
投票

Total Commander是一个文件管理器应用程序,允许您列出并选择其目录和子目录中的所有文件,然后您可以对它们运行任何总指挥官操作。其中之一是:多重命名所选文件。


0
投票

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

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

0
投票

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


0
投票

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


0
投票

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


0
投票

在Unix上,你可以使用rnm

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

要么

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

说明:

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

8
投票

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

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

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

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


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

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)

3
投票

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

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

2
投票

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

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

2
投票

如果你有forfiles(它附带Windows XP和2003以及我认为的新东西)你可以运行:

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


1
投票

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


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!
© www.soinside.com 2019 - 2024. All rights reserved.