各位大佬好!我是刚接触批处理的小白自学,写了个AI工具脚本,但一运行就闪退,卡了实在没头绪😢 想请教大家帮忙看看怎么改~- @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%\log\ai_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%\Scripts\python.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%\Scripts\python.exe" (
- call :create_venv || exit /b 1
- call :install_dependencies || exit /b 1
- )
- set "PYTHON_EXE=%VENV_PATH%\Scripts\python.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.
- echo 1. 图像生成(Stable Diffusion)
- echo 2. 文本生成(LLaMA 7B)
- echo 3. 查看日志
- echo 4. 重新初始化环境
- echo 5. 使用方法
- echo 6. 退出程序
- 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%\outputs\text_generation.log" 2>&1
- if %errorlevel% neq 0 (
- echo 错误: 生成失败!查看 %PROJECT_PATH%\outputs\text_generation.log 获取详情
- call :log %LOG_LEVEL_ERROR% "文本生成失败 - 错误代码: %errorlevel%"
- if exist "%PROJECT_PATH%\outputs\text_generation.log" type "%PROJECT_PATH%\outputs\text_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
复制代码 |