Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 从文件夹名称重命名文件的批处理脚本;发出「-&引用;_Windows_Batch File_Cmd_Rename - Fatal编程技术网

Windows 从文件夹名称重命名文件的批处理脚本;发出「-&引用;

Windows 从文件夹名称重命名文件的批处理脚本;发出「-&引用;,windows,batch-file,cmd,rename,Windows,Batch File,Cmd,Rename,多年来,我一直在使用此脚本从父文件夹名重命名电影文件名: @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.mp

多年来,我一直在使用此脚本从父文件夹名重命名电影文件名:

@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

运行脚本时,文件名将为: MovieFolder.mp4


这里的问题是“-xyz”被省略了,我太简单了,不知道如何修复这个脚本,所以我不必手动重命名所有文件。蒂亚

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

@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

正确的脚本将首先确定目录中的每种文件类型是否不止一种,以防止随机重命名其中的一种,或者执行一些额外的脚本以确保只重命名特定的一种。

没有专门处理
-
-字符的代码,而这对于
cmd
来说并没有什么特别之处,所以您的问题是不可复制的;
for/F
命令在空格和制表符处拆分文件名,但不在
-
…Eek处拆分文件名。所以没有办法导出整个文件夹,然后将其打印到文件名中?Bummer,Thanks我同意@aschipfl,最有可能的情况是您的目录名为
MovieFolder.xyz
,因为您使用的是
%%~ni
而不是
%%~nxi
%%~nxx
,所以最后一个句点和它后面的字符被视为它的扩展名,并被省略。很好,这正是我需要的。谢谢@请阅读,并把我的答案标记为“接受”。哦,酷!我想知道在哪里可以做到这一点,我查了一下你的个人资料,找到了一条感谢的信息,并询问如何解决这个问题,非常完美,谢谢!我不知道该如何处理这个问题,但我想知道你是否介意看一看,我不仅在那个问题的评论中为你提供了建议,你甚至在你现在删除的答案中使用了它(与我复制的最初帖子相比,改为另一种生成
.sfv
的方法)。你所面临的话题到底是什么,有了它。考虑到我本人或本网站的成员不会在这里就您用于创建
.sfv
文件的实用程序或应用程序向您提供建议。