Board logo

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

作者: 1139054012    时间: 2024-5-4 21:00     标题: [已解决]求助批处理怎样删除_track(任意1个或2个数字)_[chi]文件?

本帖最后由 1139054012 于 2024-5-6 22:15 编辑

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


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

删除
_track4_[chi]

我希望结果重命名
这是文件1.srt
作者: 77七    时间: 2024-5-5 00:19

  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
复制代码

作者: Five66    时间: 2024-5-5 06:59

  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
复制代码

作者: aloha20200628    时间: 2024-5-5 12:24

本帖最后由 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
复制代码

作者: 1139054012    时间: 2024-5-5 22:17

本帖最后由 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
作者: 77七    时间: 2024-5-5 22:43

回复 5# 1139054012


   重名了,这是正常的。
作者: Five66    时间: 2024-5-5 23:03

回复 5# 1139054012


    因为去掉删除之后 , 名字会重复 , 正常现象
作者: aloha20200628    时间: 2024-5-6 11:06

回复 5# 1139054012

楼主须给出重名后的命名规则,如文件名后缀序号... 但如此又被打回原形,说明源文件命名规则的必要性

作者: Batcher    时间: 2024-5-6 12:22

回复 5# 1139054012


如果前面文件名都相同,你需要怎么重命名呢?不可能3个文件都叫做:
[LoliHouse] Himesama Goumon no Jikan desu - 12 [WebRip 1080p HEVC-10bit AAC SRTx2].srt
作者: 1139054012    时间: 2024-5-6 13:44

本帖最后由 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
作者: qixiaobin0715    时间: 2024-5-6 14:14

楼主说的还是不够清楚。
是每次处理的均是3个srt文件?
作者: 77七    时间: 2024-5-6 15:39

回复 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. )
复制代码

作者: 1139054012    时间: 2024-5-6 17:36

回复 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

请问怎样改,无论目录有多少个前缀不同的文件,都只根据后缀来批量重命名和移动到对应数字文件夹?
作者: 1139054012    时间: 2024-5-6 17:39

回复 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
....
作者: 77七    时间: 2024-5-6 18:17

回复 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. )
复制代码

作者: qixiaobin0715    时间: 2024-5-7 14:25

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims=_" %%i in ('dir /b /a-d "*_track??_[chi].srt"') do (
  4.     set a=%%j
  5.     set a=!a:track=!
  6.     if not exist !a! md !a!
  7.     move "%%i_%%j_[chi].srt" "!a!\%%i.srt"
  8. )
  9. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2