如何批量重命名文件?


126

我有一堆以模式命名的文件99 - DescriptiveName.txt,我想从前面删除数字,这样我就可以了DescriptiveName.txt

我怎样才能做到这一点?我可以从命令行执行此操作,还是可以使用实用程序执行此操作?

Answers:


94

我知道在您的标题中您说的是“按剂量”,但给人的印象是您只是在寻找一种做到这一点的方法,并且想知道这是否是最佳方法。

我找到的绝对最佳工具是Bulk Rename Utility

批量重命名实用程序

它不是命令行工具,但是如果您确实想使用命令行版本,则它们确实具有命令行版本

我已经使用了很多GUI版本,它非常强大,非常快速并且非常易于使用。

哦,它是免费供个人使用。


不幸的是,该工具并非免费用于商业用途:(
AntonK

这就是为什么我说它免费供个人使用。
Jim McKeeth '17

2
这是超级快速的工具。它使用多种搜索和替换逻辑在几秒钟内解决了我的6.000个文件的问题。就像使用Notepad ++,但编辑成千上万个文件一样。一个很好的解决方案,谢谢!
花生'18

59

一个小的PowerShell脚本:

$args | Rename-Item -NewName { $_.Name.ToLower() -replace '\d+ - ' }

结合更复杂的正则表达式,可能会变成:

ls | Rename-Item -NewName {$_ -replace '(\d+) - (.*).mp3', '$2 - $1.mp3' }

这样会将“ 01-Beginning.mp3”变成“ Beginning-01.mp3”。

在发出重命名之前,请使用-WhatIfon参数Rename-Item检查重命名。


1
@sysrqb,请进一步研究。
2014年

替换不需要两个字符串表达式吗?第二个有两个,第一个没有。 ... -replace '\d+ - ',''。另外,我相信第一个比较好,只需使用regex除去开头即可。尽管我相信您应该在表达式的开头包括^锚,以便它仅匹配以数字开头的名称。
Xalorous

1
@Xalorous:好吧,您可以尝试一下。-replace右侧可以只有一个参数,在这种情况下,第二个参数隐式为空字符串。
乔伊(Joey)

这为我节省了..批量重命名实用程序现在崩溃了,我尝试了许多其他解决方案。对于熟悉regexp的人来说,这是更好的方法。非常感谢 !!
Inkh Su Tesou

24

如果您确实要使用Windows命令行(如果您不想下载某些东西),则可以这样做:

dir /B > fileList.txt
for /f "tokens=1,2,3" %i in (fileList.txt) DO ren "%i %j %l" %l

第一行将文件列表输出到名为fileList.txt的文件中。第二行将列表中的每个名称分为3个部分,即#,“-”和其余名称。对于其中的每一个,它都会执行rename命令。


2
删除第一行以简化它并执行以下操作:for /f "tokens=1,2,3" %i in ('dir /B') DO ren "%i %j %l" %l

我知道这很旧,但是仍然是一个可靠的答案-只有%l(%L)应该是%k(%K)[从%i(%I)的令牌增量,所以我,J,K ...]
唐纳德·伯德

24

AntRenamer使定义重命名模式变得非常容易。已经准备了很多(并且提供了动作的预览):

蚂蚁重命名器

免费供个人和商业使用。


19

老套:

您可以执行DIR并将输出重定向到文件,如DIR * .TXT> TEMP.BAT

然后,使用编辑器取出不需要的内容,并修改所需的部分。在顶部添加“ @echo off”,保存并运行。


我是从一位老派博士那里获得此页面参考的:dostips.com/DosCommandIndex.htm;使用旧的DOS(好)可以做的事真是太神奇了!
NIK

16

另一种选择: 海量文件重命名器

它允许轻松地重命名多个文件和文件扩展名。它非常快速和简单!

对于高级用户和开发人员,可以使用正则表达式

实际观看:

在此处输入图片说明


1
顺便说一句,我们如何选择它来打开子文件夹中的所有文件?我有一个大约有50个子文件夹的根文件夹(递归),其中有多个文件。
Pacerier,2015年

1
@Pacerier我认为Java文件选择器不允许这样做。我的想法是允许选择文件夹,并且可以包括递归搜索。我会注意到这一点,并在将来的版本中添加它!
IvanRF

13

我使用Total Commander的多重重命名工具(ctrl + M)进行此类操作。它们有用的工具(数量众多)之一易于使用,并且在必要时还可以使用正则表达式和模板。哦,显然,它可以为您进行任何更改之前的预览。

这是我推荐总指挥官回答的第三个或第四个问题...我应该从他们那里得到佣金;-)


11

我满意的工具是ReNamer。它还支持保存重命名规则,这对我很有用,因为我很多时候都进行相同的重命名。

以下是如何删除第一个破折号之前的文本的示例,但是您可以定义许多其他规则。

在此处输入图片说明


5

我已经使用Free Commander Portable(免费软件)来达到良好效果:

  1. 选择或导航到要重命名的文件或目录
  2. 按[Ctrl-M](或文件>多重重命名)
  3. 填写适合您情况的字段
  4. 验证预览显示您的期望
  5. 走!

4

对于高级用户和开发人员,我建议使用RegexRenamer

RegexRenamer屏幕截图

专业人士:

  • 非常简单的用户界面;
  • 开发人员熟悉的正则表达式;
  • GPLv2;

骗局:

  • 这不是命令行!:)

无法使其对所选文件夹的所有子文件夹都递归起作用!
Luckylooke


3

这是一个命令行解决方案---我专门编写了一个Java程序,以使其易于使用文件名中的“模式”。它是免费和开源的,因此可以随时对其进行修改:

重命名魔杖
http://renamewand.sourceforge.net/

一些相关的用法示例:

"-"将文件名前面的所有内容删除:

java -jar RenameWand.jar  "<a> - <b>"  "<b>"

在文件名前添加一个3位数字,并按上次修改时间排序:

java -jar RenameWand.jar  "<a>"  "<3|#FT> <a>"

重新排列文件名的部分,并更改大小写:

java -jar RenameWand.jar  "<album> - <artist> - <song>.<ext>" 
                          "<artist.upper> <album.title> - <song>.<ext.lower>"

3

我大约一个月前发现了RenPhoric。高超。而且是免费的

没有复杂的界面,我很快就能完全按照自己的意愿进行重命名。正则表达式功能。此后没有再使用其他任何东西。


2

我喜欢Cylog的WildRename。它功能强大,但易于使用,并具有许多功能:

  1. 快速
  2. 字符串操作
  3. 柜台
  4. 通配符
  5. 常用表达
  6. 替代
  7. 大小写转换
  8. 测井
  9. 模拟(不实际应用而显示结果)

在此处输入图片说明


2

像上面的@zdan一样,我是通过命令行执行此操作的(在Windows中使用“ cmd.exe”)。我的特殊情况花了一些时间,但经过一些研究后才解决。

像zdan一样,我将列表输出到TXT文件,然后使用tokens并相应delims地重命名文件。就我而言,我首先列出了一个像这样的文件列表:

name-01-02-2012.csv

我希望文件日期部分按y / m / d顺序排列,并在末尾加上“名称”部分,因此它应如下所示:

2012-01-02-name.csv

为此,我使用了以下代码。请注意,以这种方式执行时,将考虑文件名的所有部分,包括扩展名“ .csv”。第一次使我发疯。

dir /B > fileList.txt
for /f "tokens=1,2,3,4,5 delims=-." %i in (fileList.txt) DO ren "%i-%j-%k-%l.%m" %l-%j-%k-%i.%m

tokens是文件名的“零件”,则delims是分隔符。请注意,在我的情况下,我有2个定界符(一个破折号和一个点)。

我个人不关心“批量重命名”应用程序。正如其他人所提到的,GUI非常残酷并且不是很直观。只需进行少量研究和简单编码,即可高效快速地完成这些工作。


2

有趣的名称和命令行工具非常强大,非常快速且易于使用。“查找和替换文本” FART http://fart-it.sourceforge.net/很棒 !也可以重命名txt文件中的单词。

用法

Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]

Options:
 -h --help          Show this help message (ignores other options)
 -q --quiet         Suppress output to stdio / stderr
 -V --verbose       Show more information
 -r --recursive     Process sub-folders recursively
 -c --count         Only show filenames, match counts and totals
 -i --ignore-case   Case insensitive text comparison
 -v --invert        Print lines NOT containing the find string
 -n --line-number   Print line number before each line (1-based)
 -w --word          Match whole word (uses C syntax, like grep)
 -f --filename      Find (and replace) filename instead of contents
 -B --binary        Also search (and replace) in binary files (CAUTION)
 -C --c-style       Allow C-style extended characters (\xFF\0\t\n\r\\ etc.)
    --cvs           Skip cvs dirs; execute "cvs edit" before changing files
 -a --adapt         Adapt the case of replace_string to found string
 -b --backup        Make a backup of each changed file
 -p --preview       Do not change the files but print the changes

还有更多细节吗?它会重命名文件吗?
vonbrand 2013年

是的,-f选项,如所列。
user1016274


2
@回声关闭
setlocal enabledelayedexpansion
设置X = 5
设置FOLDER_PATH =。
推送%FOLDER_PATH%
对于(*)中的%% f,如果%% f neq%〜nx0(
    设置“文件名= %%〜nf”
    设置“文件名=!文件名:〜%X%!”
    任“ %% f”“!文件名!%%〜xf”
)
弹出

将其保存在批处理文件中并运行


很好,但是如何使X成为变量(作为参数传递)?
康坎

@Kangkan像这样:set /p "X=Enter the value for X: "
Kidquick '18

1

我使用Blackboard来管理大学中的课程。当我批量下载任务时(在Blackboard中,单击等级列的顶部,然后单击“任务文件下载”),Blackboard在文件名中添加了很多额外的内容-通常会使文件名过长而无法在Windows上有效。

它们是这样的:

Recitation20Assignment_studentname_attempt_2013-03-01-20-03-09_Exercise28129.docx

这就是我想要的

studentname.docx

因此,我通过使用内部包含文件(CMD.EXE)的文件夹打开命令窗口,使用了@zdan和@ gtr1971建议的方法。然后运行此命令将所有文件名放入文档中。

dir /b >filelist.txt

编辑文档并删除文件夹名称等。

使用此命令仅用用户名和文件扩展名替换Blackboard添加的文件名。

for /f "tokens=1,2,3,4,5,6 delims=_." %i in (filelist.txt) do ren "%i _%j_%k_%l_%m.%n" %j.%n

希望这对其他人也有帮助。



1

我已经开发了一个名为JREN.BAT混合JScript / batch命令行实用程序,可以通过执行正则表达式搜索并替换名称来重命名文件或文件夹。它是纯脚本,它将从XP开始在任何Windows计算机上本地运行。完整的文档嵌入在脚本中。

假设JREN.BAT在当前目录中,或者更好的是,在路径中的某个位置,则重命名任务变得很简单。

jren "^\d+[ -]+(.+)\.txt$" "$1" /i

要么

jren "^\d+[ -]+(?=.+\.)" "" /fm "*.txt"

有很多选项,包括/S在子目录上递归执行重命名的选项。


0

如果您需要强大的功能并且愿意花钱... PowerGrep是市场上功能最强大,用途最广泛的工具之一...您可以使用PowerGrep几乎重命名任何东西...甚至可以进行二进制搜索和替换...它是由RegEx Guru Jan Goyvaerts创建的。

在此处输入图片说明


该实用程序非常昂贵……
Wizard79,2015年

您可以无限期地免费使用它,但是值得,我一直都在使用它。
Eddie B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.