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

Cmd 使用命令行如何修改文件名,cmd,filenames,Cmd,Filenames,如何根据文件名中的分隔符修改文件夹中的文件名 我有一个文件夹,里面有由不同程序根据时间表拾取的图像-该程序只能分析仅包含主名称(sku#)的图像,而不是摄影师在名称后添加的附加数据 我可以使用命令行运行某种脚本来修改文件名&删除下划线或连字符后的所有字符(还需要删除下划线或连字符) (我不知道是否可以通过windows命令行执行此操作,但我可以选择在cygwin中运行这样的“脚本”-我更喜欢使用最有效的方法…我没有必要执行此操作:但通过快速搜索,我发现 一些人上传了一些powershell脚本。

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

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

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


(我不知道是否可以通过windows命令行执行此操作,但我可以选择在cygwin中运行这样的“脚本”-我更喜欢使用最有效的方法…

我没有必要执行此操作:但通过快速搜索,我发现

一些人上传了一些powershell脚本。最重要的答案是一个GUI工具,用于进行大量名称更改

例如:

dir /B > fileList.txt
for /f "tokens=1,2,3" %i in (fileList.txt) DO ren "%i %j %l" %l
第一行将文件列表输出到名为fileList.txt的文件中。第二行将列表中的每个名称分为三部分,即#、“-”和名称的其余部分。对于其中的每一个,它都执行重命名命令

这应该可以完成任务

第一步是以
/b
基本格式(无标题-仅名称)和
/a-d
无目录名称执行目录列表。该文件由上的
findstr
(下划线或破折号)进行过滤,%%a依次获取每个过滤后的文件名

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

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

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


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

您可以提供这些文件名的一些示例吗?我假设您在windows环境中,但如果您指定了正在使用的操作系统,这将是一件好事。
@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"