[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 求助批处理重命名问题,对高手来说可能很简单,对低手却很棘手

问题很简单, 就是如何重命名各子目录下的所有文件为 "子目录名+当前文件名"

下载了很多TV电视剧, 带有字幕子目录和文件, 比如:
E:\TV\Better.Call.Saul.S01\Subs\Better.Call.Saul.S01E01.1080p\3_English.srt    4_Chinese.srt   ...
   ......
E:\TV\Better.Call.Saul.S05\Subs\Better.Call.Saul.S05E08.1080p\3_English.srt    4_Chinese.srt   ...
很多季很多集,  所以有很多字幕子目录, 子目录下都有 3_English.srt 等等同名文件


就想把文件 3_English.srt 和 4_Chinese.srt  等等所有字幕文件重命名为 Better.Call.Saul.S01E01.1080p~3_English.srt ....
这样能减少子目录和同名字幕文件, 播放时拖放字幕更便利.

请高手提示一下怎么实现 ?

回复 1# zhqiao


3.3 以子文件夹名称作为文件名的前缀
https://mp.weixin.qq.com/s/_1qzhObTSbc6HRpJy4onhQ
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7# ppll2030


    收下, 感谢相助 !

TOP

本帖最后由 ppll2030 于 2024-8-2 23:54 编辑

把代码保存为bat文件,放在TV文件夹下,运行后会把子文件夹下所有srt字幕文件更名
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.srt') do (
  4. for %%j in ("%%i") do (
  5. set "d=%%~dpj"
  6. cd/d "!d!.."
  7. call set "d=%%d:!cd!\=%%"
  8. rem 运行确认无误,再删除echo,执行更名
  9. ren %%j "!d:\=-!%%~nxj"
  10. )
  11. )
  12. pause
复制代码

TOP

本帖最后由 zhqiao 于 2024-8-2 23:48 编辑

回复 5# 77七


还需再读点dos教程补补才能读懂,   非常感谢 !

TOP

回复 4# zhqiao


  条条大路通罗马
如 d:\a\.  应该等同于 d:\a ,使用%%~nxd 扩展路径到文件夹名;
d:\a\1.txt\.. 两个点表示上级目录吧,使用 %%~nxd 同样扩展。
解释的不知道对不对,仅供参考。
bat小白,请多指教!谢谢!

TOP

回复 2# 77七


    非常感谢.
刚刚自己修改了一个其他帖子里的bat, 能实现但有一句语法不同, 请问以下2句有什么区别?

A)        for /f "delims=" %%d in ("%%~dpi.") do (

B)     for %%j in ("%%i\..") do (

TOP

本帖最后由 zhqiao 于 2024-8-2 22:57 编辑

修改了某个高手的一个bat, 实现了目的. 虽不知其所以然....

如有存条件错误请指正


:: 240802
:: 重命名当前目录的各子目录下的文件名为 "其父目录名+当前文件名"
:: 即以当前目录下的各子目录名为前缀, 添加到各子目录下的所有文件前

@echo off
cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b /s /a-d *.srt *.ass') do (
    for %%j in ("%%i\..") do (
        ren "%%i" "%%~nxj__%%~nxi"
    )
)

TOP

  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.srt') do (
  4. for /f "delims=" %%d in ("%%~dpi.") do (
  5. echo ren "%%i" "%%~nxd~%%~nxi"
  6. )
  7. )
  8. pause
复制代码

显示正确,删除echo 再次执行。
bat小白,请多指教!谢谢!

TOP

返回列表