0

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

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

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

(我不知道是否以及如何通过 Windows 命令行执行此操作,但我确实可以选择在 cygwin 中运行这样的“脚本”——我更喜欢使用最有效的方法......)

4

2 回答 2

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没有目录名称执行目录列表。这由findstron(下划线或破折号)过滤,并且 %%a 依次获取每个过滤后的文件名。

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

重命名的尝试很可能会失败,因为新名称已经存在,因此错误消息被简单地忽略(2>nul

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

请注意,REName 命令只是ECHOed。这样可以确保在您验证这是您想要做的事情时实际上没有任何更改。只需删除ECHO之前的REN激活重命名。

于 2013-04-15T23:45:30.070 回答
0

我不需要这样做:但是通过快速搜索,我在另一个 Stack Exchange 站点上找到了这个链接。

一些人上传了一些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 部分,#、“-”和名称的其余部分。对于其中的每一个,它都会执行重命名命令。

于 2013-04-15T22:29:42.630 回答