找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 13821|回复: 8

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

[复制链接]
发表于 2024-8-2 22:11:39 | 显示全部楼层 |阅读模式
问题很简单, 就是如何重命名各子目录下的所有文件为 "子目录名+当前文件名"

下载了很多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 ....
这样能减少子目录和同名字幕文件, 播放时拖放字幕更便利.

请高手提示一下怎么实现 ?
发表于 2024-8-2 22:49:30 | 显示全部楼层
  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 再次执行。
 楼主| 发表于 2024-8-2 22:53:18 | 显示全部楼层
本帖最后由 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"
    )
)
 楼主| 发表于 2024-8-2 23:05:02 | 显示全部楼层
回复 2# 77七


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

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

B)     for %%j in ("%%i\..") do (
发表于 2024-8-2 23:32:19 | 显示全部楼层
回复 4# zhqiao


  条条大路通罗马
如 d:\a\.  应该等同于 d:\a ,使用%%~nxd 扩展路径到文件夹名;
d:\a\1.txt\.. 两个点表示上级目录吧,使用 %%~nxd 同样扩展。
解释的不知道对不对,仅供参考。
 楼主| 发表于 2024-8-2 23:45:44 | 显示全部楼层
本帖最后由 zhqiao 于 2024-8-2 23:48 编辑

回复 5# 77七


还需再读点dos教程补补才能读懂,   非常感谢 !
发表于 2024-8-2 23:51:23 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2024-8-3 00:07:45 | 显示全部楼层
回复 7# ppll2030


    收下, 感谢相助 !
发表于 2024-8-4 10:01:22 | 显示全部楼层
回复 1# zhqiao


3.3 以子文件夹名称作为文件名的前缀
https://mp.weixin.qq.com/s/_1qzhObTSbc6HRpJy4onhQ
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 21:02 , Processed in 0.020690 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表