使用命令行如何修改文件名

时间:2013-04-15 22:19:49

标签: cmd filenames

如何根据文件名中的分隔符修改文件夹中的文件名?

我有一个文件夹,其图像可以根据时间表由不同的程序获取 - 如果图像只包含主要名称(sku#),则程序只能分析图像,而不是摄影师添加的附加数据。名称

使用命令行我可以运行某种脚本来修改文件名&从下划线或连字符后删除所有字符(也需要删除下划线或连字符)

(我不知道是否可以通过Windows命令行完成此操作,但我确实可以选择在cygwin中运行这样的'脚本' - 我更喜欢使用最好用的东西......)

2 个答案:

答案 0 :(得分:0)

我没有必要这样做:但通过快速搜索,我找到了this link on another Stack Exchange site.

有些人上传了一些powershell脚本。最佳答案是用于进行大规模名称更改的GUI工具。

有这个CMD的例子:

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

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

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL
FOR /f "delims=" %%a IN ('dir /b /a-d ^|findstr "_ -"') DO (
 FOR /f "delims=_-" %%i IN ("%%a") DO ECHO REN "%%a" "%%i%%~xa" 2>nul
)
FOR /f "delims=" %%a IN ('dir /b /a-d ^|findstr "_ -"') DO ECHO failed ON "%%a"

这应该可以胜任。

第一步是以/b基本形式(不带标题 - 仅名称)和/a-d执行目录列表而不使用目录名称。这会被findstr过滤(下划线或短划线),而%% a依次获取每个过滤的文件名。

下一步是获取这些文件名并将其拆分为_-上的部分。第一个标记(最多但不包括分隔符)应用于%% i,因此所需的rename是从"%%a"(原始文件名)到"%%i%%~xa" - 第一个标记+原始文件名的扩展名。

由于新名称已经存在,重命名的尝试很可能会失败,因此只会忽略错误消息(2>nul

最后,查找任何未重命名的文件并报告它们(当然是可选的)

请注意,REN ame命令仅为ECHO。这样可以确保在您确认这是您想要执行的操作时,实际上没有任何更改。只需删除ECHO之前的REN即可激活重命名。