我有一堆文件用99 - DescriptiveName.txt命名,我想从前面删除数字,所以我只有DescriptiveName.txt

我该怎么做?我可以从命令行执行此操作,还是可以使用实用程序执行此操作?

评论

请参阅@IvanRF答案,以获取仅能重命名并且非常易于使用的批量重命名工具:superuser.com/a/730292/163741

#1 楼

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

我拥有绝对的最佳工具为此找到的是Bulk Rename Utility。



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

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

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

评论


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

– AntonK
17-10-28在8:47

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

–吉姆·麦基思(Jim McKeeth)
17-10-30在21:16

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

–花生
18年7月25日在19:06

#2 楼

一个小的PowerShell脚本:

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


结合更复杂的正则表达式,它可能变成类似以下内容:

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


会将“ 01-Beginning.mp3”之类的内容转换为“ Beginning-01.mp3”。

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

评论


@sysrqb,请进一步研究。

–乔伊
14年1月14日在9:51

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

– Xalorous
16年8月8日在15:54

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

–乔伊
16年8月8日在20:00

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

– Inkh Su Tesou
18年8月6日在20:03



#3 楼

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

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


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

评论


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

–user387876
15年1月7日在18:38

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

–唐纳德·伯德
18年6月18日在3:04

#4 楼

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



免费供个人和商业使用。

#5 楼

老派:

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

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

评论


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

– nik
09年8月7日在17:28

#6 楼

另一种选择:Massive File Renamer

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

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

查看实际操作:



评论


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

–起搏器
15年11月11日在20:23

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

– IvanRF
15年11月11日在20:34

杀手one,我花了4秒钟来了解它的工作原理,花了8秒钟来键入正则表达式,花了1秒钟来重命名了数千个文件。超级好玩,谢谢!

– Benj
19年11月16日在22:12



#7 楼

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

这是我推荐的Total Commander的第三个或第四个问题...我应该从他们那里得到提成;-)

#8 楼

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

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



#9 楼

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



专业版:


非常简单的UI;
开发人员熟悉的正则表达式;
GPLv2;

Con的:


这不是命令行! :)


评论


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

– Luckylooke
18/09/13在9:51

#10 楼

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


选择或导航到文件或目录以重命名
按[Ctrl-M](或文件>多次重命名)
根据您的情况填写相应的字段
验证预览是否显示您的期望
开始!


#11 楼

最简单的方法是使用“重命名母版”。

#12 楼

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

RenameWandhttp://renamewand.sourceforge.net/

一些相关的用法示例:

"-"之前的所有内容拖放到文件名中:

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


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

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


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

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


#13 楼

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

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

#14 楼

就像上面的@zdan一样,我是通过命令行(在Windows中使用“ cmd.exe”)完成的。对于我的特殊情况,需要进行一些修补,但是经过一些研究解决了。

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

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非常残酷并且不是很直观。只需进行少量研究和简单编码,即可高效快速地完成这些事情。

#15 楼

有趣的名称和命令行工具非常强大,非常快速且易于使用。 “查找和替换文本” 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 (\xFFq4312078q\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
13年3月30日在20:38

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

–user1016274
17年9月3日,12:47

#16 楼

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


快速
字符串操作
计数器
通配符
常规表达式
替代
大小写转换
记录

模拟(显示结果但不实际应用)



#17 楼

多重重命名脚本是Total Commanders多重重命名工具的开源替代品,您可以通过脚本进行驱动。它可以使用TC插件获取元数据信息。

https://code.google.com/p/multi-rename-script/


#18 楼

@echo off
setlocal enabledelayedexpansion
set X=5
set FOLDER_PATH=.
pushd %FOLDER_PATH%
for %%f in (*) do if %%f neq %~nx0 (
    set "filename=%%~nf"
    set "filename=!filename:~%X%!"
    ren "%%f" "!filename!%%~xf"
)
popd



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

评论


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

–康坎
15年6月2日在15:31

@Kangkan像这样:set / p“ X =输入X的值:”

–Kidquick
18年4月12日在14:51

#19 楼

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

它们是这样的:

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


这就是我想要的

studentname.docx


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

dir /b >filelist.txt


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

使用此命令仅用用户名和文件扩展名替换Blackboard添加的文件名。 br />
for /f "tokens=1,2,3,4,5,6 delims=_." %i in (filelist.txt) do ren "%i _%j_%k_%l_%m.%n" %j.%n


希望对别人也有帮助。

#20 楼

这是另一个名为File Attribute Changer的简单程序,可用于重命名文件。这是一个可移植程序,因此您可以将其放在USB驱动器上。

http://www.softpedia.com/get/Desktop-Enhancements/Other-Desktop-Enhancements/File-Attribute-Changer .shtml

#21 楼

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

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

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




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


有很多选项,包括/S选项,该选项递归地对子目录执行重命名。

#22 楼

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



评论


该实用程序非常昂贵……

–Wizard79
15年8月8日在18:30

您可以无限期地免费使用它,但是值得,我一直都在使用它。

– Eddie B
2015年8月8日在18:31