
[已解決]引用多個bat情況下最后一個bat沒運行就cmd窗口關閉該怎么解決最后由 1139054012 于 -6-3 13:41
引用多個bat,這些都引用各自不同ps1前兩個運行成功,但是第二個運行了兩次,然后就關閉cmd,無論是打開的cmd還是主cmd窗口都關閉 導致之后的操作暫停運行,怎樣更改讓最后一個bat也能復制正常運行?bat編碼都是UTF-8無簽名 指定編碼 不這樣會亂碼 ps1都是UTf-8有簽名格式引用的都是以下格式,運行完自刪nclick="copycode($('code0'));">復制代碼
- @echo off
- setlocal enabledelayedexpansion
- :: 設置 UTF-8 編碼
- chcp 65001 >nul
- rem ================== 全局變量配置區 ==================
- set SIMPLE_DIR=簡體
- set TRAD_DIR=繁體
- set TARGET_SUB_DIR=@my更改方正準圓_GBK
- rem 標識符規則
- set KEY_SIMP_SUFFIX=_字幕01
- set KEY_TRAD_SUFFIX=_字幕02
- set KEY_CHS=.chs
- set KEY_CHT=.cht
- set KEY_SC=.sc
- set KEY_TC=.tc
- set KEY_JPSC=.jpsc
- set KEY_JSTC=.jptc
- rem 外部工具路徑
- set ASSOC_BAT_PATH=D:test[250511]bat UTF-8格式調用ps1替換ASS字體名和刪除日文正文和樣式更改.bat
- set ZSUB_BAT_PATH=D:test[250518]ZSubAC字幕自動化簡繁互轉工具.bat
- set CHECK_BAT_PATH=D:test[250602]判斷簡繁字幕是否對應zSubDirFix v0.1.bat
- rem 目標運行目錄
- set FINAL_CHECK_DIR=%cd%
- rem 創建主目錄
- md %SIMPLE_DIR% 2>nul
- md %TRAD_DIR% 2>nul
- echo.
- echo [步驟 1/6] 正在按文件名規則分類字幕文件...
- echo.
- rem 1. 按文件名規則分類,并記錄已分類文件
- set classified_files=
- set uncategorized_files=
- for %%F in (*.ass *.srt *.ssa) do (
- set filename=%%~nxF
- set matched=0
- echo 正在處理:!filename!
- rem 判斷并移動簡體相關文件
- echo !filename! | findstr /i /c:%KEY_SIMP_SUFFIX% >nul && (
- move %%F %SIMPLE_DIR% >nul
- set matched=1
- )
- echo !filename! | findstr /i /c:%KEY_CHS% >nul && (
- move %%F %SIMPLE_DIR% >nul
- set matched=1
- )
- echo !filename! | findstr /i /c:%KEY_SC% >nul && (
- move %%F %SIMPLE_DIR% >nul
- set matched=1
- )
- echo !filename! | findstr /i /c:%KEY_JPSC% >nul && (
- move %%F %SIMPLE_DIR% >nul
- set matched=1
- )
- rem 判斷并移動繁體相關文件
- echo !filename! | findstr /i /c:%KEY_TRAD_SUFFIX% >nul && (
- move %%F %TRAD_DIR% >nul
- set matched=1
- )
- echo !filename! | findstr /i /c:%KEY_CHT% >nul && (
- move %%F %TRAD_DIR% >nul
- set matched=1
- )
- echo !filename! | findstr /i /c:%KEY_TC% >nul && (
- move %%F %TRAD_DIR% >nul
- set matched=1
- )
- echo !filename! | findstr /i /c:%KEY_JSTC% >nul && (
- move %%F %TRAD_DIR% >nul
- set matched=1
- )
- if !matched!==1 (
- set classified_files=!classified_files!;!filename!
- ) else (
- echo 未識別標識符,將此文件歸類為簡體:!filename!
- copy %%F %SIMPLE_DIR% >nul
- del %%F >nul
- set classified_files=!classified_files!;!filename!
- set uncategorized_files=!uncategorized_files!;!filename!
- )
- )
- echo.
- echo [步驟 2/6] 正在清理文件名中的關鍵字...
- echo.
- rem 2. 清理文件名(去掉 _字幕01/_字幕02/.sc/.tc/.chs/.cht/.jpsc/.jstc)
- for /r %SIMPLE_DIR% %%F in (*.ass *.ssa *.srt) do (
- set filename=%%~nF
- set extension=%%~xF
- set newname=!filename:%KEY_SIMP_SUFFIX%=!
- set newname=!newname:%KEY_TRAD_SUFFIX%=!
- set newname=!newname:%KEY_SC%=!
- set newname=!newname:%KEY_TC%=!
- set newname=!newname:%KEY_CHS%=!
- set newname=!newname:%KEY_CHT%=!
- set newname=!newname:%KEY_JPSC%=!
- set newname=!newname:%KEY_JSTC%=!
- if not !filename!==!newname! (
- echo 正在重命名:!filename!!extension! --^> !newname!!extension!
- ren %%F !newname!!extension!
- )
- )
- for /r %TRAD_DIR% %%F in (*.ass *.ssa *.srt) do (
- set filename=%%~nF
- set extension=%%~xF
- set newname=!filename:%KEY_SIMP_SUFFIX%=!
- set newname=!newname:%KEY_TRAD_SUFFIX%=!
- set newname=!newname:%KEY_SC%=!
- set newname=!newname:%KEY_TC%=!
- set newname=!newname:%KEY_CHS%=!
- set newname=!newname:%KEY_CHT%=!
- set newname=!newname:%KEY_JPSC%=!
- set newname=!newname:%KEY_JSTC%=!
- if not !filename!==!newname! (
- echo 正在重命名:!filename!!extension! --^> !newname!!extension!
- ren %%F !newname!!extension!
- )
- )
- echo.
- echo [步驟 3/6] 正在檢查是否需要字體替換并執行...
- echo.
- rem 3. 創建字體替換子目錄并復制文件
- set need_processing=0
- for %%F in (%SIMPLE_DIR%*.ass %SIMPLE_DIR%*.ssa) do (
- set need_processing=1
- goto :check_done
- )
- :check_done
- if %need_processing% equ 1 (
- md %SIMPLE_DIR%%TARGET_SUB_DIR% 2>nul
- copy %SIMPLE_DIR%*.ass %SIMPLE_DIR%%TARGET_SUB_DIR% >nul 2>&1
- copy %SIMPLE_DIR%*.ssa %SIMPLE_DIR%%TARGET_SUB_DIR% >nul 2>&1
- if exist %ASSOC_BAT_PATH% (
- echo 正在復制字體替換工具到:%SIMPLE_DIR%%TARGET_SUB_DIR%
- copy %ASSOC_BAT_PATH% %SIMPLE_DIR%%TARGET_SUB_DIR% >nul 2>&1
- )
- rem 使用 start /wait 來調用字體替換腳本,防止關閉主腳本
- cd /d %SIMPLE_DIR%%TARGET_SUB_DIR%
- echo 正在執行字體替換工具...
- start /wait cmd /c [250511]bat UTF-8格式調用ps1替換ASS字體名和刪除日文正文和樣式更改.bat
- cd /d %~dp0
- )
- echo.
- echo [步驟 4/6] 正在將無標示符字幕復制到繁體目錄并調用 ZSubAC 腳本...
- echo.
- rem 4. 將無標識符文件從簡體復制到繁體,并運行 ZSubAC
- if defined uncategorized_files (
- echo 發現無標識符文件,正在復制到繁體目錄并調用轉換工具...
- rem 創建繁體目錄結構(如果不存在)
- md %TRAD_DIR% 2>nul
- rem 判斷 ass 和 ssa 繁體文件夾創建 @my更改方正準圓_GBK
- if %need_processing% equ 1 (
- md %TRAD_DIR%%TARGET_SUB_DIR% 2>nul
- )
- rem 復制 ZSubAC 工具到繁體目錄
- if exist %ZSUB_BAT_PATH% (
- echo 正在復制 ZSubAC 工具到繁體目錄
- copy %ZSUB_BAT_PATH% %TRAD_DIR% >nul 2>&1
- )
- rem 復制簡體根目錄下的字幕文件到繁體根目錄
- for %%F in (%SIMPLE_DIR%*.ass %SIMPLE_DIR%*.ssa %SIMPLE_DIR%*.srt) do (
- echo 正在復制:%%~nxF 到繁體目錄
- copy %%F %TRAD_DIR% >nul
- )
- rem 復制字體替換后的 ass 文件到繁體子目錄
- for %%F in (%SIMPLE_DIR%%TARGET_SUB_DIR%*.ass %SIMPLE_DIR%%TARGET_SUB_DIR%*.ssa %SIMPLE_DIR%%TARGET_SUB_DIR%*.srt) do (
- echo 正在復制:%%~nxF 到繁體子目錄
- copy %%F %TRAD_DIR%%TARGET_SUB_DIR% >nul
- )
- rem 執行 ZSubAC 工具
- echo.
- echo 正在進入 %TRAD_DIR% 執行 ZSubAC 字幕轉換工具...
- cd /d %TRAD_DIR%
- start /wait cmd /c [250518]ZSubAC字幕自動化簡繁互轉工具.bat
- echo.
- echo 正在進入 %TRAD_DIR%%TARGET_SUB_DIR% 執行 ZSubAC 字幕轉換工具...
- cd /d %TRAD_DIR%%TARGET_SUB_DIR%
- start /wait cmd /c [250518]ZSubAC字幕自動化簡繁互轉工具.bat
- cd /d %~dp0
- )
- echo.
- echo [步驟 5/6] 正在檢查是否有其他未分類的無標識符文件...
- echo.
- rem 5. 判斷當前目錄中剩余的未分類文件(備用邏輯)
- set need_run_zsubac=
- for %%F in (*.ass *.srt *.ssa) do (
- set filename=%%~nxF
- rem 檢查是否為已分類文件
- echo !classified_files! | findstr /c:;!filename! >nul && (
- echo 文件 !filename! 已被分類,跳過。
- goto :continue_loop
- )
- rem 再次檢查是否已被移動走
- if not exist %SIMPLE_DIR%!filename! if not exist %TRAD_DIR%!filename! (
- echo 正在將無標示符文件復制到繁體目錄:!filename!
- copy %%F %TRAD_DIR% >nul
- set need_run_zsubac=1
- )
- :continue_loop
- )
- rem 調用 ZSubAC 工具
- if defined need_run_zsubac (
- echo 正在將 ZSubAC 工具復制到 %TRAD_DIR%
- copy %ZSUB_BAT_PATH% %TRAD_DIR% >nul 2>&1
- cd /d %TRAD_DIR%
- echo 正在執行 ZSubAC 字幕轉換工具...
- start /wait cmd /c [250518]ZSubAC字幕自動化簡繁互轉工具.bat
- cd /d %~dp0
- )
- echo.
- echo [步驟 6/6] 正在復制并運行簡繁字幕檢查工具到指定目錄...
- echo.
- rem 6. 復制并運行 [250602]判斷簡繁字幕是否對應zSubDirFix v0.1.bat 到指定目錄
- echo 正在復制 [250602]判斷簡繁字幕是否對應zSubDirFix v0.1.bat 到 %FINAL_CHECK_DIR%
- copy /Y %CHECK_BAT_PATH% %FINAL_CHECK_DIR%[250602]判斷簡繁字幕是否對應zSubDirFix v0.1.bat >nul 2>&1
- echo 正在切換到目標路徑并執行檢查工具...
- cd /d %FINAL_CHECK_DIR%
- call [250602]判斷簡繁字幕是否對應zSubDirFix v0.1.bat
- echo 返回原始路徑...
- cd /d %~dp0
- echo.
- echo 所有任務已完成!
- pause>nul
- endlocal
nclick="copycode($('code1'));">復制代碼
- @echo off
- :: 設置 UTF-8 編碼
- chcp 65001 >nul
- :: 獲取當前 .bat 所在目錄(即要處理的 .ass 所在路徑)
- set TARGET_PATH=%CD%
- :: 定義 .ps1 腳本的固定絕對路徑(不要改)
- set PS_script=E:reader【批處理】【bat】【cmd】批量移動字幕到子目錄文件夾根據簡繁ZSubAC轉換器.ps1
- :: 檢查腳本是否存在
- if not exist %PS_script% (
- echo [錯誤] 找不到 PowerShell 腳本: %PS_script%
- pause
- exit /b 1
- )
- :: 輸出調試信息(確認路徑是否正確)
- echo.
- echo 當前路徑 (TARGET_PATH): %TARGET_PATH%
- echo 腳本路徑 (PS_script): %PS_script%
- :: 調用 PowerShell 并傳遞當前路徑給 .ps1 腳本
- powershell.exe -NoProfile -ExecutionPolicy Bypass -Command & { & '%PS_script%' -Path '%TARGET_PATH%' }
- :: 提示完成
- echo.
- echo 所有操作已完成,按任意鍵退出...
- rem 刪除當前運行的BAT文件
- start cmd /c del %~f0

