
我用bat做了一個AI任務自動化工具但是一打開就閃退各位大佬好!我是剛接觸批處理的小白自學,寫了個AI工具腳本,但一運行就閃退,卡了實在沒頭緒😢 想請教大家幫忙看看怎么改~
nclick="copycode($('code0'));">復制代碼
- @echo off
- chcp 65001 >nul
- setlocal enabledelayedexpansion
- set DEBUG_MODE=1
- :: AI任務自動化工具 v1.0.2
- set PROJECT_PATH=D:AI_Project
- set VENV_PATH=%PROJECT_PATH%venv
- set LOG_FILE=%PROJECT_PATH%logai_tool.log
- set CONFIG_FILE=%PROJECT_PATH%config.ini
- set INPUT_FILE=%PROJECT_PATH%input.txt
- set OUTPUT_FILE=%PROJECT_PATH%output.txt
- set LOG_LEVEL_DEBUG=1
- set LOG_LEVEL_INFO=2
- set LOG_LEVEL_WARN=3
- set LOG_LEVEL_ERROR=4
- set CURRENT_LOG_LEVEL=%LOG_LEVEL_INFO%
- if not exist %PROJECT_PATH%log mkdir %PROJECT_PATH%log 2>nul
- :: 日志函數
- :log
- if %CURRENT_LOG_LEVEL% gtr %1 exit /b
- for /f skip=1 %%x in ('wmic os get LocalDateTime') do if not defined timestamp set timestamp=%%x
- set timestamp=%timestamp:~0,4%-%timestamp:~4,2%-%timestamp:~6,2% %timestamp:~8,2%:%timestamp:~10,2%:%timestamp:~12,2%
- if %1 equ %LOG_LEVEL_DEBUG% (set level_prefix=DEBUG) else if %1 equ %LOG_LEVEL_INFO% (set level_prefix=INFO ) else if %1 equ %LOG_LEVEL_WARN% (set level_prefix=WARN ) else (set level_prefix=ERROR)
- echo %timestamp% [%level_prefix%] - %* >> %LOG_FILE%
- if %DEBUG_MODE% equ 1 echo %timestamp% [%level_prefix%] - %*
- exit /b
- :: 檢查Python
- :check_python
- echo 檢查Python環境...
- python --version >nul 2>&1 || (
- echo 錯誤: 未找到Python解釋器!請安裝Python并添加到PATH。
- echo 下載地址: https://www.python.org/downloads/
- call :log %LOG_LEVEL_ERROR% 未找到Python解釋器
- pause
- exit /b 1
- )
- exit /b 0
- :: 創建目錄
- :create_dir
- if not exist %~1 (
- mkdir %~1 2>nul || (
- echo 錯誤: 無法創建目錄 %~1!請檢查權限。
- call :log %LOG_LEVEL_ERROR% 無法創建目錄: %~1
- pause
- exit /b 1
- )
- echo 已創建目錄: %~1
- call :log %LOG_LEVEL_INFO% 已創建目錄: %~1
- )
- exit /b 0
- :: 創建虛擬環境
- :create_venv
- echo 創建Python虛擬環境...
- python -m venv %VENV_PATH% || (
- echo 錯誤: 無法創建虛擬環境!請檢查Python安裝。
- call :log %LOG_LEVEL_ERROR% 無法創建虛擬環境
- pause
- exit /b 1
- )
- echo 虛擬環境已創建: %VENV_PATH%
- call :log %LOG_LEVEL_INFO% 虛擬環境已創建
- exit /b 0
- :: 安裝依賴
- :install_dependencies
- echo 安裝Python依賴庫...
- %VENV_PATH%scriptspython.exe -m pip install torch diffusers transformers -q || (
- echo 錯誤: 依賴庫安裝失敗!請檢查網絡連接
- call :log %LOG_LEVEL_ERROR% 依賴庫安裝失敗
- pause
- exit /b 1
- )
- echo 依賴庫安裝完成
- call :log %LOG_LEVEL_INFO% 依賴庫安裝完成
- exit /b 0
- :: 初始化環境
- :init_env
- call :log %LOG_LEVEL_INFO% 開始環境初始化
- echo ==========================
- echo環境初始化
- echo ==========================
- echo.
- call :check_python || exit /b 1
- call :create_dir %PROJECT_PATH% || exit /b 1
- call :create_dir %PROJECT_PATH%outputs
- call :create_dir %PROJECT_PATH%log
- if not exist %VENV_PATH%scriptspython.exe (
- call :create_venv || exit /b 1
- call :install_dependencies || exit /b 1
- )
- set PYTHON_EXE=%VENV_PATH%scriptspython.exe
- echo 使用Python解釋器: %PYTHON_EXE%
- call :log %LOG_LEVEL_INFO% 使用Python解釋器: %PYTHON_EXE%
- echo 檢查CUDA環境...
- %PYTHON_EXE% -c import torch; print('CUDA可用' if torch.cuda.is_available() else 'CUDA不可用') >nul 2>&1
- if %errorlevel% neq 0 (
- echo 警告: 無法檢測CUDA環境,圖像生成可能無法使用GPU加速
- call :log %LOG_LEVEL_WARN% 無法檢測CUDA環境
- ) else call :log %LOG_LEVEL_INFO% CUDA環境檢查完成
- call :log %LOG_LEVEL_INFO% 環境初始化完成
- echo 環境初始化完成!
- timeout /t 2 >nul
- goto menu
- :: 主菜單
- :menu
- cls
- echo =============================
- echo本地AI任務自動化工具 v1.0.2
- echo =============================
- echo.
- echo1. 圖像生成(Stable Diffusion)
- echo2. 文本生成(LLaMA 7B)
- echo3. 查看日志
- echo4. 重新初始化環境
- echo5. 使用方法
- echo6. 退出程序
- echo.
- echo ========================
- choice /c 123456 /n /m 請選擇操作 [1-6]:
- if errorlevel 6 goto exit
- if errorlevel 5 goto usage
- if errorlevel 4 goto init_env
- if errorlevel 3 goto view_log
- if errorlevel 2 goto txt_gen_menu
- if errorlevel 1 goto img_gen_menu
- :: 圖像生成
- :img_gen_menu
- cls
- echo =====================================
- echo 圖像生成設置
- echo =====================================
- echo.
- set /p prompt=請輸入提示詞:
- set /p steps=生成步數 [50]:
- if %steps%== set steps=50
- set /p seed=隨機種子 [1234]:
- if %seed%== set seed=1234
- echo.
- echo 生成參數:
- echo 提示詞: %prompt%
- echo 步數: %steps%
- echo 種子: %seed%
- echo.
- choice /c yn /n /m 確認生成圖像嗎?(Y/N):
- if errorlevel 2 goto menu
- for /f skip=1 %%x in ('wmic os get LocalDateTime') do if not defined timestamp set timestamp=%%x
- set timestamp=%timestamp:~0,4%%timestamp:~4,2%%timestamp:~6,2%_%timestamp:~8,2%%timestamp:~10,2%%timestamp:~12,2%
- set OUTPUT_DIR=%PROJECT_PATH%outputs%timestamp%
- call :create_dir %OUTPUT_DIR% || goto menu
- call :log %LOG_LEVEL_INFO% 開始圖像生成 - 提示詞: %prompt%, 步數: %steps%, 種子: %seed%, 輸出: %OUTPUT_DIR%
- echo 正在生成圖像...
- %PYTHON_EXE% generate_image.py --prompt %prompt% --steps %steps% --seed %seed% --output %OUTPUT_DIR% > %OUTPUT_DIR%generation.log 2>&1
- if %errorlevel% neq 0 (
- echo 錯誤: 生成失敗!查看 %OUTPUT_DIR%generation.log 獲取詳情
- call :log %LOG_LEVEL_ERROR% 圖像生成失敗 - 錯誤代碼: %errorlevel%
- if exist %OUTPUT_DIR%generation.log type %OUTPUT_DIR%generation.log | findstr /i error >> %LOG_FILE%
- pause
- ) else (
- echo 圖像生成成功!輸出目錄: %OUTPUT_DIR%
- call :log %LOG_LEVEL_INFO% 圖像生成成功
- timeout /t 3 >nul
- )
- goto menu
- :: 文本生成
- :txt_gen_menu
- cls
- echo ========================
- echo 文本生成設置
- echo ========================
- echo.
- echo 注意: 文本生成將從 %INPUT_FILE% 讀取輸入提示
- echo.
- set /p timeout=超時時間(秒) [30]:
- if %timeout%== set timeout=30
- echo.
- echo 生成參數:
- echo 輸入文件: %INPUT_FILE%
- echo 輸出文件: %OUTPUT_FILE%
- echo 超時: %timeout%秒
- echo.
- choice /c yn /n /m 確認開始文本生成嗎?(Y/N):
- if errorlevel 2 goto menu
- if not exist %INPUT_FILE% (
- echo 錯誤: 輸入文件 %INPUT_FILE% 不存在!創建示例文件...
- >%INPUT_FILE% echo 請輸入提示文本,AI將基于此生成內容。
- if exist %INPUT_FILE% (
- echo 已創建示例輸入文件: %INPUT_FILE%
- call :log %LOG_LEVEL_WARN% 創建示例輸入文件
- timeout /t 3 >nul
- ) else (
- echo 錯誤: 無法創建示例輸入文件!
- call :log %LOG_LEVEL_ERROR% 無法創建示例輸入文件
- pause
- goto menu
- )
- )
- (
- echo [text_gen]
- echo input_file=%INPUT_FILE%
- echo output_file=%OUTPUT_FILE%
- echo timeout=%timeout%
- ) > %CONFIG_FILE% 2>nul || (
- echo 錯誤: 無法創建配置文件!
- call :log %LOG_LEVEL_ERROR% 無法創建配置文件: %CONFIG_FILE%
- pause
- goto menu
- )
- call :log %LOG_LEVEL_INFO% 開始文本生成 - 輸入: %INPUT_FILE%, 輸出: %OUTPUT_FILE%, 超時: %timeout%秒
- echo 正在生成文本...
- %PYTHON_EXE% generate_text.py --config %CONFIG_FILE% > %PROJECT_PATH%outputstext_generation.log 2>&1
- if %errorlevel% neq 0 (
- echo 錯誤: 生成失敗!查看 %PROJECT_PATH%outputstext_generation.log 獲取詳情
- call :log %LOG_LEVEL_ERROR% 文本生成失敗 - 錯誤代碼: %errorlevel%
- if exist %PROJECT_PATH%outputstext_generation.log type %PROJECT_PATH%outputstext_generation.log | findstr /i error >> %LOG_FILE%
- pause
- ) else (
- echo 文本生成成功!輸出文件: %OUTPUT_FILE%
- call :log %LOG_LEVEL_INFO% 文本生成成功
- timeout /t 3 >nul
- )
- goto menu
- :: 查看日志
- :view_log
- cls
- echo ===========================
- echo 操作日志
- echo ===========================
- echo.
- if not exist %LOG_FILE% (
- echo 日志文件不存在或為空。
- pause
- goto menu
- )
- set page_size=15
- for /f %%a in ('type %LOG_FILE% ^| find /c /v ') do set /a total_lines=%%a, pages=(total_lines+page_size-1)/page_size
- if %pages% equ 0 set pages=1
- set /p page=輸入頁數 [1-%pages%]:
- if %page%== set page=1
- if %page% lss 1 (echo 錯誤: 頁數不能小于1!& timeout /t 2 >nul & goto view_log)
- if %page% gtr %pages% (echo 錯誤: 頁數不能大于%pages%!& timeout /t 2 >nul & goto view_log)
- set /a start_line=(%page%-1)*%page_size%+1, end_line=start_line+page_size-1
- if %end_line% gtr %total_lines% set end_line=%total_lines%
- echo 第%page%頁 / 共%pages%頁
- echo.
- setlocal enabledelayedexpansion
- set lines=0
- for /f usebackq delims= %%a in (%LOG_FILE%) do (
- set /a lines+=1
- if !lines! geq %start_line% if !lines! leq %end_line% echo !line!
- )
- endlocal
- echo.
- echo =========================================
- pause >nul
- goto menu
- :: 使用方法
- :usage
- cls
- echo ==========================
- echo 使用方法
- echo ==========================
- echo.
- echo 1. 環境初始化:自動檢查并初始化環境
- echo 2. 圖像生成:基于Stable Diffusion生成圖像
- echo 3. 文本生成:基于LLaMA 7B生成文本
- echo 4. 重新初始化環境:重建虛擬環境并安裝依賴
- echo 5. 查看日志:查看工具運行記錄
- echo 6. 退出程序:結束工具運行
- echo.
- pause >nul
- goto menu
- :: 退出程序
- :exit
- call :log %LOG_LEVEL_INFO% 程序正常退出
- cls
- echo =================================
- echo感謝使用本地AI任務自動化工具!
- echo =================================
- timeout /t 2 >nul
- exit /b 0
- :: 直接運行時初始化環境
- if %0==%~dpnx0 call :init_env

