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

[文件操作] [已解决]引用多个bat情况下,最后一个bat没运行就cmd窗口关闭,该怎么解决?

[复制链接]
发表于 2025-6-3 08:56:51 | 显示全部楼层 |阅读模式
本帖最后由 1139054012 于 2025-6-3 13:41 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :: 设置 UTF-8 编码
  4. chcp 65001 >nul

  5. rem ================== 全局变量配置区 ==================
  6. set "SIMPLE_DIR=简体"
  7. set "TRAD_DIR=繁体"
  8. set "TARGET_SUB_DIR=@my更改方正准圆_GBK"

  9. rem 标识符规则
  10. set "KEY_SIMP_SUFFIX=_字幕01"
  11. set "KEY_TRAD_SUFFIX=_字幕02"
  12. set "KEY_CHS=.chs"
  13. set "KEY_CHT=.cht"
  14. set "KEY_SC=.sc"
  15. set "KEY_TC=.tc"
  16. set "KEY_JPSC=.jpsc"
  17. set "KEY_JSTC=.jptc"

  18. rem 外部工具路径
  19. set "ASSOC_BAT_PATH=D:\test\[250511]bat UTF-8格式调用ps1替换ASS字体名和删除日文正文和样式更改.bat"
  20. set "ZSUB_BAT_PATH=D:\test\[250518]ZSubAC字幕自动化简繁互转工具.bat"
  21. set "CHECK_BAT_PATH=D:\test\[250602]判断简繁字幕是否对应zSubDirFix v0.1.bat"

  22. rem 目标运行目录
  23. set "FINAL_CHECK_DIR=%cd%"

  24. rem 创建主目录
  25. md "%SIMPLE_DIR%" 2>nul
  26. md "%TRAD_DIR%" 2>nul

  27. echo.
  28. echo [步骤 1/6] 正在按文件名规则分类字幕文件...
  29. echo.

  30. rem 1. 按文件名规则分类,并记录已分类文件
  31. set "classified_files="
  32. set "uncategorized_files="

  33. for %%F in (*.ass *.srt *.ssa) do (
  34.     set "filename=%%~nxF"
  35.     set "matched=0"

  36.     echo 正在处理:!filename!

  37.     rem 判断并移动简体相关文件
  38.     echo "!filename!" | findstr /i /c:"%KEY_SIMP_SUFFIX%" >nul && (
  39.         move "%%F" "%SIMPLE_DIR%" >nul
  40.         set "matched=1"
  41.     )
  42.     echo "!filename!" | findstr /i /c:"%KEY_CHS%" >nul && (
  43.         move "%%F" "%SIMPLE_DIR%" >nul
  44.         set "matched=1"
  45.     )
  46.     echo "!filename!" | findstr /i /c:"%KEY_SC%" >nul && (
  47.         move "%%F" "%SIMPLE_DIR%" >nul
  48.         set "matched=1"
  49.     )
  50.     echo "!filename!" | findstr /i /c:"%KEY_JPSC%" >nul && (
  51.         move "%%F" "%SIMPLE_DIR%" >nul
  52.         set "matched=1"
  53.     )

  54.     rem 判断并移动繁体相关文件
  55.     echo "!filename!" | findstr /i /c:"%KEY_TRAD_SUFFIX%" >nul && (
  56.         move "%%F" "%TRAD_DIR%" >nul
  57.         set "matched=1"
  58.     )
  59.     echo "!filename!" | findstr /i /c:"%KEY_CHT%" >nul && (
  60.         move "%%F" "%TRAD_DIR%" >nul
  61.         set "matched=1"
  62.     )
  63.     echo "!filename!" | findstr /i /c:"%KEY_TC%" >nul && (
  64.         move "%%F" "%TRAD_DIR%" >nul
  65.         set "matched=1"
  66.     )
  67.     echo "!filename!" | findstr /i /c:"%KEY_JSTC%" >nul && (
  68.         move "%%F" "%TRAD_DIR%" >nul
  69.         set "matched=1"
  70.     )

  71.     if "!matched!"=="1" (
  72.         set "classified_files=!classified_files!;!filename!"
  73.     ) else (
  74.         echo 未识别标识符,将此文件归类为简体:!filename!
  75.         copy "%%F" "%SIMPLE_DIR%" >nul
  76.         del "%%F" >nul
  77.         set "classified_files=!classified_files!;!filename!"
  78.         set "uncategorized_files=!uncategorized_files!;!filename!"
  79.     )
  80. )

  81. echo.
  82. echo [步骤 2/6] 正在清理文件名中的关键字...
  83. echo.

  84. rem 2. 清理文件名(去掉 _字幕01/_字幕02/.sc/.tc/.chs/.cht/.jpsc/.jstc)
  85. for /r "%SIMPLE_DIR%" %%F in (*.ass *.ssa *.srt) do (
  86.     set "filename=%%~nF"
  87.     set "extension=%%~xF"
  88.     set "newname=!filename:%KEY_SIMP_SUFFIX%=!"
  89.     set "newname=!newname:%KEY_TRAD_SUFFIX%=!"
  90.     set "newname=!newname:%KEY_SC%=!"
  91.     set "newname=!newname:%KEY_TC%=!"
  92.     set "newname=!newname:%KEY_CHS%=!"
  93.     set "newname=!newname:%KEY_CHT%=!"
  94.     set "newname=!newname:%KEY_JPSC%=!"
  95.     set "newname=!newname:%KEY_JSTC%=!"
  96.     if not "!filename!"=="!newname!" (
  97.         echo 正在重命名:!filename!!extension! --^> !newname!!extension!
  98.         ren "%%F" "!newname!!extension!"
  99.     )
  100. )

  101. for /r "%TRAD_DIR%" %%F in (*.ass *.ssa *.srt) do (
  102.     set "filename=%%~nF"
  103.     set "extension=%%~xF"
  104.     set "newname=!filename:%KEY_SIMP_SUFFIX%=!"
  105.     set "newname=!newname:%KEY_TRAD_SUFFIX%=!"
  106.     set "newname=!newname:%KEY_SC%=!"
  107.     set "newname=!newname:%KEY_TC%=!"
  108.     set "newname=!newname:%KEY_CHS%=!"
  109.     set "newname=!newname:%KEY_CHT%=!"
  110.     set "newname=!newname:%KEY_JPSC%=!"
  111.     set "newname=!newname:%KEY_JSTC%=!"
  112.     if not "!filename!"=="!newname!" (
  113.         echo 正在重命名:!filename!!extension! --^> !newname!!extension!
  114.         ren "%%F" "!newname!!extension!"
  115.     )
  116. )

  117. echo.
  118. echo [步骤 3/6] 正在检查是否需要字体替换并执行...
  119. echo.

  120. rem 3. 创建字体替换子目录并复制文件
  121. set "need_processing=0"
  122. for %%F in ("%SIMPLE_DIR%\*.ass" "%SIMPLE_DIR%\*.ssa") do (
  123.     set "need_processing=1"
  124.     goto :check_done
  125. )
  126. :check_done

  127. if %need_processing% equ 1 (
  128.     md "%SIMPLE_DIR%\%TARGET_SUB_DIR%" 2>nul
  129.     copy "%SIMPLE_DIR%\*.ass" "%SIMPLE_DIR%\%TARGET_SUB_DIR%" >nul 2>&1
  130.     copy "%SIMPLE_DIR%\*.ssa" "%SIMPLE_DIR%\%TARGET_SUB_DIR%" >nul 2>&1
  131.     if exist "%ASSOC_BAT_PATH%" (
  132.         echo 正在复制字体替换工具到:%SIMPLE_DIR%\%TARGET_SUB_DIR%
  133.         copy "%ASSOC_BAT_PATH%" "%SIMPLE_DIR%\%TARGET_SUB_DIR%" >nul 2>&1
  134.     )

  135.     rem 使用 start /wait 来调用字体替换脚本,防止关闭主脚本
  136.     cd /d "%SIMPLE_DIR%\%TARGET_SUB_DIR%"
  137.     echo 正在执行字体替换工具...
  138.     start /wait "" cmd /c "[250511]bat UTF-8格式调用ps1替换ASS字体名和删除日文正文和样式更改.bat"
  139.     cd /d "%~dp0"
  140. )

  141. echo.
  142. echo [步骤 4/6] 正在将无标示符字幕复制到繁体目录并调用 ZSubAC 脚本...
  143. echo.

  144. rem 4. 将无标识符文件从简体复制到繁体,并运行 ZSubAC
  145. if defined uncategorized_files (
  146.     echo 发现无标识符文件,正在复制到繁体目录并调用转换工具...

  147.     rem 创建繁体目录结构(如果不存在)
  148.     md "%TRAD_DIR%" 2>nul
  149.    
  150.     rem 判断 ass 和 ssa 繁体文件夹创建 @my更改方正准圆_GBK
  151.     if %need_processing% equ 1 (
  152.         md "%TRAD_DIR%\%TARGET_SUB_DIR%" 2>nul
  153.     )
  154.    
  155.     rem 复制 ZSubAC 工具到繁体目录
  156.     if exist "%ZSUB_BAT_PATH%" (
  157.         echo 正在复制 ZSubAC 工具到繁体目录
  158.         copy "%ZSUB_BAT_PATH%" "%TRAD_DIR%" >nul 2>&1
  159.     )

  160.     rem 复制简体根目录下的字幕文件到繁体根目录
  161.     for %%F in ("%SIMPLE_DIR%\*.ass" "%SIMPLE_DIR%\*.ssa" "%SIMPLE_DIR%\*.srt") do (
  162.         echo 正在复制:%%~nxF 到繁体目录
  163.         copy "%%F" "%TRAD_DIR%" >nul
  164.     )

  165.     rem 复制字体替换后的 ass 文件到繁体子目录
  166.     for %%F in ("%SIMPLE_DIR%\%TARGET_SUB_DIR%\*.ass" "%SIMPLE_DIR%\%TARGET_SUB_DIR%\*.ssa" "%SIMPLE_DIR%\%TARGET_SUB_DIR%\*.srt") do (
  167.         echo 正在复制:%%~nxF 到繁体子目录
  168.         copy "%%F" "%TRAD_DIR%\%TARGET_SUB_DIR%" >nul
  169.     )

  170.     rem 执行 ZSubAC 工具
  171.     echo.
  172.     echo 正在进入 %TRAD_DIR% 执行 ZSubAC 字幕转换工具...
  173.     cd /d "%TRAD_DIR%"
  174.     start /wait "" cmd /c "[250518]ZSubAC字幕自动化简繁互转工具.bat"

  175.     echo.
  176.     echo 正在进入 %TRAD_DIR%\%TARGET_SUB_DIR% 执行 ZSubAC 字幕转换工具...
  177.     cd /d "%TRAD_DIR%\%TARGET_SUB_DIR%"
  178.     start /wait "" cmd /c "[250518]ZSubAC字幕自动化简繁互转工具.bat"

  179.     cd /d "%~dp0"
  180. )

  181. echo.
  182. echo [步骤 5/6] 正在检查是否有其他未分类的无标识符文件...
  183. echo.

  184. rem 5. 判断当前目录中剩余的未分类文件(备用逻辑)
  185. set "need_run_zsubac="
  186. for %%F in (*.ass *.srt *.ssa) do (
  187.     set "filename=%%~nxF"

  188.     rem 检查是否为已分类文件
  189.     echo "!classified_files!" | findstr /c:";!filename!" >nul && (
  190.         echo 文件 !filename! 已被分类,跳过。
  191.         goto :continue_loop
  192.     )

  193.     rem 再次检查是否已被移动走
  194.     if not exist "%SIMPLE_DIR%\!filename!" if not exist "%TRAD_DIR%\!filename!" (
  195.         echo 正在将无标示符文件复制到繁体目录:!filename!
  196.         copy "%%F" "%TRAD_DIR%" >nul
  197.         set "need_run_zsubac=1"
  198.     )

  199.     :continue_loop
  200. )

  201. rem 调用 ZSubAC 工具
  202. if defined need_run_zsubac (
  203.     echo 正在将 ZSubAC 工具复制到 %TRAD_DIR%
  204.     copy "%ZSUB_BAT_PATH%" "%TRAD_DIR%" >nul 2>&1
  205.     cd /d "%TRAD_DIR%"
  206.     echo 正在执行 ZSubAC 字幕转换工具...
  207.     start /wait "" cmd /c "[250518]ZSubAC字幕自动化简繁互转工具.bat"
  208.     cd /d "%~dp0"
  209. )

  210. echo.
  211. echo [步骤 6/6] 正在复制并运行简繁字幕检查工具到指定目录...
  212. echo.

  213. rem 6. 复制并运行 [250602]判断简繁字幕是否对应zSubDirFix v0.1.bat 到指定目录
  214.     echo 正在复制 [250602]判断简繁字幕是否对应zSubDirFix v0.1.bat 到 %FINAL_CHECK_DIR%
  215.     copy /Y "%CHECK_BAT_PATH%" "%FINAL_CHECK_DIR%\[250602]判断简繁字幕是否对应zSubDirFix v0.1.bat" >nul 2>&1

  216.     echo 正在切换到目标路径并执行检查工具...
  217.     cd /d "%FINAL_CHECK_DIR%"
  218.     call "[250602]判断简繁字幕是否对应zSubDirFix v0.1.bat"

  219.     echo 返回原始路径...
  220.     cd /d "%~dp0"


  221. echo.
  222. echo 所有任务已完成!
  223. pause>nul
  224. endlocal
复制代码
引用多个bat,这些都引用各自不同ps1
前两个运行成功,但是第二个运行了两次,然后就关闭cmd,无论是打开的cmd还是主cmd窗口都关闭 导致之后的操作暂停运行,怎样更改让最后一个bat也能复制正常运行?
bat编码都是UTF-8无签名 指定编码 不这样会乱码 ps1都是UTf-8有签名格式

引用的都是以下格式,运行完自删
  1. @echo off
  2. :: 设置 UTF-8 编码
  3. chcp 65001 >nul

  4. :: 获取当前 .bat 所在目录(即要处理的 .ass 所在路径)
  5. set "TARGET_PATH=%CD%"

  6. :: 定义 .ps1 脚本的固定绝对路径(不要改)
  7. set "PS_SCRIPT=E:\reader\【批处理】【bat】【cmd】\批量移动字幕到子目录文件夹\根据简繁\ZSubAC转换器.ps1"

  8. :: 检查脚本是否存在
  9. if not exist "%PS_SCRIPT%" (
  10.     echo [错误] 找不到 PowerShell 脚本: %PS_SCRIPT%
  11.     pause
  12.     exit /b 1
  13. )

  14. :: 输出调试信息(确认路径是否正确)
  15. echo.
  16. echo 当前路径 (TARGET_PATH): %TARGET_PATH%
  17. echo 脚本路径 (PS_SCRIPT): %PS_SCRIPT%

  18. :: 调用 PowerShell 并传递当前路径给 .ps1 脚本
  19. powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& { & '%PS_SCRIPT%' -Path '%TARGET_PATH%' }"

  20. :: 提示完成
  21. echo.
  22. echo 所有操作已完成,按任意键退出...

  23. rem 删除当前运行的BAT文件
  24. start "" cmd /c del "%~f0"

复制代码
发表于 2025-6-3 10:37:33 | 显示全部楼层
回复 1# 1139054012

在 for 循环体内向体外可以 goto 但在体内不能 goto,将一楼代码 215-232 行改为以下代码试试...

  1. for %%F in (*.ass *.srt *.ssa) do (
  2.     set "filename=%%~nxF"
  3.     rem 检查是否为已分类文件
  4.     echo "!classified_files!" | findstr /c:";!filename!" >nul && (
  5.         echo 文件 !filename! 已被分类,跳过。
  6.     ) || (
  7.         rem 再次检查是否已被移动走
  8.         if not exist "%SIMPLE_DIR%\!filename!" if not exist "%TRAD_DIR%\!filename!" (
  9.            echo 正在将无标示符文件复制到繁体目录:!filename!
  10.            copy "%%F" "%TRAD_DIR%" >nul
  11.            set "need_run_zsubac=1"
  12.         )
  13.     )
  14. )
复制代码

评分

参与人数 1技术 +1 收起 理由
1139054012 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-6-3 11:41:47 | 显示全部楼层
本帖最后由 1139054012 于 2025-6-3 13:41 编辑

回复 2# aloha20200628


  谢了,折腾半天解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:14 , Processed in 0.016808 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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