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

[文件操作] [已解决]求助批处理怎样删除_track(任意1个或2个数字)_[chi]文件?

[复制链接]
发表于 2024-5-4 21:00:07 | 显示全部楼层 |阅读模式
本帖最后由 1139054012 于 2024-5-6 22:15 编辑

删除文件名最后]后面,如果包含
_track3_[chi]
_track4_[chi]
_track5_[chi]
_track11_[chi]


举例
这是文件1_track1_[chi].srt

删除
_track4_[chi]

我希望结果重命名
这是文件1.srt

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-5-5 00:19:31 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /a-d "*_track*_[chi].srt"') do (
  4.         set "str=%%i"
  5.         setlocal enabledelayedexpansion
  6.         for /f "delims=|" %%a in ("!str:_track=|!") do (
  7.                 endlocal
  8.                 ren "%%i" "%%a%%~xi"
  9.         )
  10. )
  11. pause
复制代码
发表于 2024-5-5 06:59:51 | 显示全部楼层

  1. @echo off&pause
  2. for %%a in (*.srt) do (
  3. set file=%%a
  4. for /f "delims=" %%b in ('echo^,"%%file:~-17%%"^|findstr /x "_*track[0-9][0-9]*_\[chi\]\.srt"') do set _=1
  5. if defined _ (
  6. setlocal enabledelayedexpansion
  7. set _@rp=!file:~-17!
  8. if "!_@rp:~0,1!" == "t" set _@rp=_!_@rp!
  9. for %%c in ("!_@rp!") do rename "!file!" "!file:%%~c=.srt!"
  10. endlocal
  11. set _=
  12. )
  13. )
  14. pause
复制代码
发表于 2024-5-5 12:24:52 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-5-5 12:27 编辑

回复 1# 1139054012

假设字幕文件*.srt文件名中的 ‘被保留字段’ 不再包含 _ 字符...

  1. @echo off
  2. for /f "tokens=1* delims=_" %%a in ('dir /b/a-d *_track*.srt') do (ren "%%~a_%%~b" "%%~a.srt")
  3. pause&exit/b
复制代码
 楼主| 发表于 2024-5-5 22:17:03 | 显示全部楼层
本帖最后由 1139054012 于 2024-5-5 22:27 编辑

回复 2# 77七
回复 3# Five66
回复 4# aloha20200628


如果前面文件名都相同,运行如上图,只有1个可以重命名,其他的没成功重命名


[LoliHouse] Himesama Goumon no Jikan desu - 12 [WebRip 1080p HEVC-10bit AAC SRTx2]_track1_[chi].srt
[LoliHouse] Himesama Goumon no Jikan desu - 12 [WebRip 1080p HEVC-10bit AAC SRTx2]_track4_[chi].srt
[LoliHouse] Himesama Goumon no Jikan desu - 12 [WebRip 1080p HEVC-10bit AAC SRTx2]_track11_[chi].srt


只有
[LoliHouse] Himesama Goumon no Jikan desu - 12 [WebRip 1080p HEVC-10bit AAC SRTx2]_track11_[chi].srt
重命名成
[LoliHouse] Himesama Goumon no Jikan desu - 12 [WebRip 1080p HEVC-10bit AAC SRTx2].srt
发表于 2024-5-5 22:43:27 | 显示全部楼层
回复 5# 1139054012


   重名了,这是正常的。
发表于 2024-5-5 23:03:13 | 显示全部楼层
回复 5# 1139054012


    因为去掉删除之后 , 名字会重复 , 正常现象
发表于 2024-5-6 11:06:07 | 显示全部楼层
回复 5# 1139054012

楼主须给出重名后的命名规则,如文件名后缀序号... 但如此又被打回原形,说明源文件命名规则的必要性
发表于 2024-5-6 12:22:49 | 显示全部楼层
回复 5# 1139054012


如果前面文件名都相同,你需要怎么重命名呢?不可能3个文件都叫做:
[LoliHouse] Himesama Goumon no Jikan desu - 12 [WebRip 1080p HEVC-10bit AAC SRTx2].srt
 楼主| 发表于 2024-5-6 13:44:30 | 显示全部楼层
本帖最后由 1139054012 于 2024-5-6 17:42 编辑

回复 6# 77七
回复 7# Five66
回复 8# aloha20200628
回复 9# Batcher

不好意思,糊涂了
可以新建文件夹移动后重命名吗

比如有
这是文件1_track1_[chi].srt
这是文件1_track4_[chi].srt
这是文件1_track11_[chi].srt

以上三个文件,希望按数字顺序
新建「简体」文件夹,移动第1个最小数字的
这是文件1_track1_[chi].srt
重命名
这是文件1.srt

新建「繁体」文件夹,移动第2最小数字的
这是文件1_track4_[chi].srt
重命名
这是文件1.srt

其次的直接按数字文件夹重命名就好
这是文件1_track11_[chi].srt
新建11文件夹,移动并重命名
这是文件1.srt
发表于 2024-5-6 14:14:53 | 显示全部楼层
楼主说的还是不够清楚。
是每次处理的均是3个srt文件?
发表于 2024-5-6 15:39:33 | 显示全部楼层
回复 10# 1139054012


  
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /a-d "*_track*_[chi].srt"') do (
  5.         set "str=%%i"
  6.         setlocal enabledelayedexpansion
  7.         set "str=!str:_[chi]=|!"
  8.         for /f "tokens=1-2 delims=|" %%a in ("!str:_track=|!") do (
  9.                 endlocal
  10.                 set /a n=%%b+1000000
  11.                 call set "#%%n%%=%%i|%%a%%~xi|%%b"
  12.         )
  13. )
  14. for /f "tokens=1-3 delims=|" %%a in ('set #') do (
  15.         call :1
  16. )
  17. pause & exit

  18.         :1
  19.         for %%x in (简体 繁体 其它) do (
  20.                 if not defined _%%x (
  21.                         if "%%x" neq "其它" (
  22.                                 set _%%x=1
  23.                                 set f=%%x
  24.                         ) else (
  25.                                 set f=%%c
  26.                         )
  27.                         call md "%%f%%"
  28.                         for /f "tokens=1* delims=#=" %%i in ("%%a") do (
  29.                                 call move "%%j" "%%f%%\%%b"
  30.                         )
  31.                         exit /b
  32.                 )
  33.         )
复制代码

评分

参与人数 1技术 +1 收起 理由
1139054012 + 1 感谢实现

查看全部评分

 楼主| 发表于 2024-5-6 17:36:28 | 显示全部楼层
回复 12# 77七

谢谢,这个实现了单个文件后缀数字不同,新建文件夹后缀数字并重命名,请问如果是多个不同文件如何批量移动和重命名呢?

如果前缀文件只有一个的话
这是文件1_track1_[chi].srt
这是文件1_track7_[chi].srt
这是文件1_track11_[chi].srt
会分别新建1,7,11文件夹并删除_trackx_[chi]后缀移动


但如果目录下有多个文件
这是文件1_track1_[chi].srt
这是文件1_track7_[chi].srt
这是文件1_track11_[chi].srt
这是文件2_track1_[chi].srt
这是文件2_track7_[chi].srt
这是文件2_track11_[chi].srt
这是文件3_track1_[chi].srt
这是文件3_track7_[chi].srt
这是文件3_track11_[chi].srt
....

就只有
这是文件1_track1_[chi].srt
这是文件1_track7_[chi].srt
这是文件1_track11_[chi].srt
的三个后缀不同的文件会移动到对应文件夹,其他的没有移动和重命名
这是文件2_track1_[chi].srt
这是文件2_track7_[chi].srt
这是文件2_track11_[chi].srt
这是文件3_track1_[chi].srt
这是文件3_track7_[chi].srt
这是文件3_track11_[chi].srt

请问怎样改,无论目录有多少个前缀不同的文件,都只根据后缀来批量重命名和移动到对应数字文件夹?
 楼主| 发表于 2024-5-6 17:39:33 | 显示全部楼层
回复 11# qixiaobin0715


  多个文件,这里只举例了3个


目录下有多个文件
这是文件1_track1_[chi].srt
这是文件1_track7_[chi].srt
这是文件1_track11_[chi].srt
这是文件2_track1_[chi].srt
这是文件2_track7_[chi].srt
这是文件2_track11_[chi].srt
这是文件3_track1_[chi].srt
这是文件3_track7_[chi].srt
这是文件3_track11_[chi].srt
....
发表于 2024-5-6 18:17:27 | 显示全部楼层
回复 13# 1139054012


   修改12楼代码
  1. 第3-4行之间增加两行

  2. :loop
  3. setlocal

  4. 第16-17行之间增加3行

  5. endlocal
  6. if exist "*_track*_[chi].srt" (
  7.         goto :loop
  8. )
复制代码

评分

参与人数 1技术 +1 收起 理由
1139054012 + 1 太感谢了,测试成功

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 01:16 , Processed in 0.025872 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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