题
有没有办法在子目录中批量重命名文件?
例如:
将 * .html
重命名为包含目录和子目录的文件夹中的 * .htm
。
解决方案
Windows命令提示符:(如果在批处理文件中,将%x更改为%% x)
for /r %x in (*.html) do ren "%x" *.htm
这也适用于重命名文件的中间部分
for /r %x in (website*.html) do ren "%x" site*.htm
其他提示
对于Windows,这是我发现的最佳工具:
它可以做任何事情并且有厨房水槽。
对于Linux,您可以使用大量的脚本语言和shell来帮助您,就像之前的答案一样。
find . -regex ".*html<*>quot; | while read line;
do
A=`basename ${line} | sed 's/html$/htm/g'`;
B=`dirname ${line}`;
mv ${line} "${B}/${A}";
done
在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)
在Bash中,您可以执行以下操作:
for x in $(find . -name \*.html); do
mv $x $(echo "$x" | sed 's/\.html$/.htm/')
done
我确信这是一种更优雅的方式,但这是我头脑中的第一件事:
for f in $(find . -type f -name '*.html'); do
mv $f $(echo "$f" | sed 's/html$/htm/')
done
如果您有forfiles(它附带Windows XP和2003以及我认为的新内容),您可以运行:
forfiles / S / M * .HTM / C&quot; cmd / c ren @file * .HTML&quot;
在Linux上,您可以使用'重命名'命令重命名文件批次。
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!
Total Commander 这是一个文件管理器应用程序,可让您列出&amp;选择其目录中的所有文件sub-dirs,然后你可以对它们进行任何总指挥官操作。其中之一是:多重命名所选文件。
Linux上的AWK。对于第一个目录,这是你的答案......通过在dir_path上递归调用awk来推断,也许是通过编写另一个写下这个精确awk的awk ...等等。
ls dir_path/. | awk -F"." '{print "mv file_name/"<*>" dir_path/"$1".new_extension"}' |csh
对于Windows,我使用基于正则表达式的重命名和拖放功能制作了方便的小型VBScript解决方案 ;放弃支持。如果你愿意,试一试 - 把它放在一个vbs文件中,然后在资源管理器中放下你的文件夹。
在Windows上,重命名会执行那个相当不错。免费软件,但不是开源软件。
在Windows上,您可以在 https中找到开源简单的C#批量文件重命名应用程序://filerenamer.codeplex.com 适用于简单的 excel文件。 给这个应用程序提供一个包含两列源和目标的excel文件,它就完成了。
在Unix上,您可以使用 rnm :
rnm -rs '/\.html$/.htm/' -fo -dp -1 *
或
rnm -ns '/n/.htm' -ss '\.html
说明:
-
-ns
:name string(新名称)。 / n /
是一个名称字符串规则,扩展为不带扩展名的文件名。
-
-ss
:搜索字符串(正则表达式)。搜索匹配的文件。
-
-rs
:替换 / search_regex / replace_part / modifier
形式的字符串
-
-fo
:仅文件模式
-
-dp
:目录深度(-1表示无限制)。
醇> -fo -dp -1 *
说明:
-
-ns
:name string(新名称)。/ n /
是一个名称字符串规则,扩展为不带扩展名的文件名。 -
-ss
:搜索字符串(正则表达式)。搜索匹配的文件。 -
-rs
:替换/ search_regex / replace_part / modifier
形式的字符串
-
-fo
:仅文件模式 -
-dp
:目录深度(-1表示无限制)。
醇>