从文件夹名称重命名文件的批处理脚本; “-”的问题

Posted

技术标签:

【中文标题】从文件夹名称重命名文件的批处理脚本; “-”的问题【英文标题】:Batch Script to rename files from folder name; issue with "-" 【发布时间】:2021-04-07 21:17:19 【问题描述】:

多年来我一直使用这个脚本,我从这里找到从父文件夹名称重命名电影文件名:

@echo off
for /r /d %%x in (*) do (
 pushd "%%x"
 echo %%x
 for /F %%i in ("%%x") do (
  ren *.mkv "%%~ni.mkv" 2> NUL
  ren *.avi "%%~ni.avi" 2> NUL
  ren *.mp4 "%%~ni.mp4" 2> NUL
 )
 popd
)

所以我遇到的唯一问题是父文件夹如下所示: 电影文件夹-xyz

运行脚本,文件名将是: 电影文件夹.mp4

这里的问题是“-xyz”被省略了,我太简单了,无法弄清楚如何修复这个脚本,这样我就不必手动重命名所有文件。蒂亚!

【问题讨论】:

没有专门处理-字符的代码,这对cmd来说没什么特别的,所以你的问题是不可重现的; for /F 命令在 spacestabs 处拆分文件名,但不在 -... 呃。所以没有解决方法可以以某种方式导出整个文件夹然后将其打印到文件名中?不客气,谢谢 我同意@aschipfl,最可能的情况是您的目录被命名为MovieFolder.xyz,并且因为您使用的是%%~ni而不是%%~nxi%%~nxx,最后一个时期并且它后面的字符被视为它的扩展,并被省略。 【参考方案1】:

我不确定你为什么要这样做,但对于同样的任务,你可以这样做:

@for /r /d %%x in (*) do @(ren "%%x\*.mkv" "%%~nxx.mkv" 2> NUL
    ren "%%x\*.avi" "%%~nxx.avi" 2> NUL
    ren "%%x\*.mp4" "%%~nxx.mp4" 2> NUL)

甚至更简单:

@for /r /d %%x in (*) do @for %%y in (mkv avi mp4) do @ren "%%x\*.%%y" "%%~nxx.%%y" 2> NUL

一个适当的脚本会首先确定目录中是否存在多个这些文件类型,以防止随机重命名其中一个,或执行一些额外的脚本以确保只有特定的一个是重命名。

【讨论】:

非常棒,这正是我所需要的。谢谢!! @Cujo67,请阅读What should I do when someone answers my question?,并考虑将我的答案标记为已接受。 太酷了!想知道在哪里做,我查看了您的个人资料以感谢您并询问如何解决,完美,谢谢! 不知道如何解决这个问题,但想知道你是否介意看看***.com/questions/63872074/… 我不仅在该问题的 cmets 中为您提供了建议,您甚至在您现在已删除的答案中使用了它,(更改为生成 .sfv 的不同方法,比你最初的帖子,我已经复制)。您所面临的主题问题到底是什么。考虑到我本人或本网站的成员不会在这里就您使用哪个实用程序或应用程序来创建 .sfv 文件向您提供建议。

以上是关于从文件夹名称重命名文件的批处理脚本; “-”的问题的主要内容,如果未能解决你的问题,请参考以下文章

多次复制文件夹及其内容,然后重命名它们

使用创建日期复制和重命名文件(批处理脚本)

查找和重命名没有扩展名的文件?

使用内容重命名 PDF 文件的批处理脚本

使用批处理脚本重命名上个月的文件

Powershell-批量重命名替换文件名