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

[文件操作] [已解决]求助批处理怎样删除_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
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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
复制代码
bat小白,请多指教!谢谢!

TOP

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

TOP

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

TOP

本帖最后由 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

TOP

回复 5# 1139054012


   重名了,这是正常的。
bat小白,请多指教!谢谢!

TOP

回复 5# 1139054012


    因为去掉删除之后 , 名字会重复 , 正常现象

TOP

回复 5# 1139054012

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

TOP

回复 5# 1139054012


如果前面文件名都相同,你需要怎么重命名呢?不可能3个文件都叫做:
[LoliHouse] Himesama Goumon no Jikan desu - 12 [WebRip 1080p HEVC-10bit AAC SRTx2].srt
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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

TOP

楼主说的还是不够清楚。
是每次处理的均是3个srt文件?

TOP

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

评分人数

bat小白,请多指教!谢谢!

TOP

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

请问怎样改,无论目录有多少个前缀不同的文件,都只根据后缀来批量重命名和移动到对应数字文件夹?

TOP

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

TOP

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

评分人数

bat小白,请多指教!谢谢!

TOP

返回列表