194 lines
5.2 KiB
Markdown
194 lines
5.2 KiB
Markdown
# Windows批处理编码问题修复
|
||
|
||
## 🔍 问题分析
|
||
|
||
你遇到的错误是典型的Windows批处理文件编码问题:
|
||
|
||
```
|
||
'鎻愮ず]' 不是内部或外部命令,也不是可运行的程序
|
||
'唬寮傛妗嗘灦锛岃嚜鍔ㄧ敓鎴怉PI鏂囨。' 不是内部或外部命令,也不是可运行的程序
|
||
```
|
||
|
||
### 根本原因:
|
||
1. **字符编码问题**:中文字符在Windows批处理中出现乱码
|
||
2. **代码页不匹配**:Windows默认代码页与文件编码不一致
|
||
3. **特殊字符冲突**:某些中文字符被误解析为命令
|
||
|
||
## ✅ 解决方案
|
||
|
||
### 方案1: 纯英文版本(推荐)
|
||
|
||
创建了 `create-compose-package-windows-en.bat`:
|
||
- **完全使用英文**:所有提示、注释、变量名都是英文
|
||
- **避免编码问题**:不依赖特定的字符编码
|
||
- **跨系统兼容**:在任何Windows系统上都能正常运行
|
||
|
||
### 方案2: 编码修复(备选)
|
||
|
||
如果需要中文版本,可以:
|
||
```batch
|
||
@echo off
|
||
chcp 65001 >nul
|
||
REM 设置UTF-8编码
|
||
```
|
||
|
||
但这种方法在不同Windows版本上可能有兼容性问题。
|
||
|
||
## 📊 版本对比
|
||
|
||
| 特性 | 中文版本 | 英文版本 |
|
||
|------|----------|----------|
|
||
| 编码问题 | ❌ 有乱码 | ✅ 无问题 |
|
||
| 兼容性 | ❌ 依赖编码 | ✅ 通用 |
|
||
| 可读性 | ✅ 中文友好 | ✅ 国际化 |
|
||
| 维护性 | ❌ 编码敏感 | ✅ 稳定 |
|
||
| 文件大小 | 较大 | 较小 |
|
||
|
||
## 🚀 英文版本特性
|
||
|
||
### 1. 完整功能保持
|
||
```batch
|
||
echo Please select service architecture:
|
||
echo 1) Dual Service - API Server(5050) + History Viewer(5051)
|
||
echo 2) FastAPI Service - Modern async framework with auto API docs(5051)
|
||
echo 3) Flask Service - Lightweight traditional framework(5050)
|
||
```
|
||
|
||
### 2. 清晰的状态提示
|
||
```batch
|
||
echo [INFO] Selected architecture: !SERVICE_DESC!
|
||
echo [SUCCESS] Project files copied successfully
|
||
echo [ERROR] Docker image build failed
|
||
```
|
||
|
||
### 3. 标准化的文件结构
|
||
```
|
||
dms-compliance-dual-amd64-windows-20250820-123456/
|
||
├── docker-compose.yml # No version field
|
||
├── Dockerfile # Alpine-based multi-stage
|
||
├── .env # Environment configuration
|
||
├── start.bat # Windows batch start script
|
||
├── stop.bat # Windows batch stop script
|
||
├── logs.bat # Windows batch log viewer
|
||
├── docker-image.tar.gz # Docker image export
|
||
└── README.md # English documentation
|
||
```
|
||
|
||
## 🔧 技术实现
|
||
|
||
### 子程序结构
|
||
```batch
|
||
:create_dual_dockerfile
|
||
REM Create Dockerfile for dual service architecture
|
||
(
|
||
echo # Multi-stage build - Build stage
|
||
echo FROM python:3.11-alpine AS builder
|
||
...
|
||
) > Dockerfile
|
||
goto :eof
|
||
```
|
||
|
||
### 错误处理
|
||
```batch
|
||
docker buildx build --platform "%TARGET_PLATFORM%" --tag "%IMAGE_NAME%:latest" --load .
|
||
if errorlevel 1 (
|
||
echo [ERROR] Docker image build failed
|
||
cd /d "%~dp0"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
```
|
||
|
||
### 文件复制优化
|
||
```batch
|
||
REM Use robocopy to exclude cache files
|
||
robocopy "ddms_compliance_suite" "%TEMP_BUILD_DIR%\ddms_compliance_suite" /E /XD __pycache__ .git .pytest_cache /XF *.pyc *.log *.tmp >nul 2>&1
|
||
```
|
||
|
||
## 📝 使用方法
|
||
|
||
### 运行脚本
|
||
```cmd
|
||
create-compose-package-windows-en.bat
|
||
```
|
||
|
||
### 交互选择
|
||
```
|
||
Please select service architecture:
|
||
1) Dual Service - API Server(5050) + History Viewer(5051)
|
||
2) FastAPI Service - Modern async framework with auto API docs(5051)
|
||
3) Flask Service - Lightweight traditional framework(5050)
|
||
|
||
Please enter choice (1-3) [default: 1]: 1
|
||
|
||
Please select target platform architecture:
|
||
1) AMD64 (x86_64) - Intel/AMD 64-bit [Recommended]
|
||
2) ARM64 (aarch64) - Apple M1/M2, ARM 64-bit
|
||
3) ARMv7 - Raspberry Pi 3/4, ARM 32-bit
|
||
0) Auto-detect current platform
|
||
|
||
Please enter choice (0-3) [default: 0]: 0
|
||
|
||
Build configuration confirmation:
|
||
Architecture: Dual Service - API Server(5050) + History Viewer(5051)
|
||
Ports: 5050,5051
|
||
Platform: AMD64 (x86_64) - Intel/AMD 64-bit [Auto-detected]
|
||
|
||
Confirm to start build? (y/N): y
|
||
```
|
||
|
||
## 🎯 测试验证
|
||
|
||
使用 `test-windows-en.bat` 进行自动化测试:
|
||
```batch
|
||
echo [TEST] Running Windows English version script...
|
||
(
|
||
echo 1
|
||
echo 0
|
||
echo y
|
||
) | create-compose-package-windows-en.bat
|
||
```
|
||
|
||
## 📋 生成的管理脚本
|
||
|
||
### start.bat
|
||
```batch
|
||
echo === DMS Compliance Tool Start Script (Windows Version) ===
|
||
echo [INFO] Building Docker image...
|
||
%COMPOSE_CMD% build
|
||
echo [INFO] Starting services...
|
||
%COMPOSE_CMD% up -d
|
||
```
|
||
|
||
### stop.bat
|
||
```batch
|
||
echo === DMS Compliance Tool Stop Script (Windows Version) ===
|
||
echo [INFO] Stopping services...
|
||
%COMPOSE_CMD% down
|
||
```
|
||
|
||
### logs.bat
|
||
```batch
|
||
echo === DMS Compliance Tool Logs (Windows Version) ===
|
||
%COMPOSE_CMD% logs -f
|
||
```
|
||
|
||
## 🎉 总结
|
||
|
||
✅ **编码问题完全解决**:
|
||
- 使用纯英文避免字符编码问题
|
||
- 兼容所有Windows版本和代码页设置
|
||
- 提供清晰的英文提示和文档
|
||
|
||
✅ **功能完整保持**:
|
||
- 支持双服务架构(API服务器 + 历史查看器)
|
||
- 支持FastAPI和Flask单服务架构
|
||
- 完整的Docker构建和部署流程
|
||
|
||
✅ **用户体验优化**:
|
||
- 清晰的英文提示
|
||
- 标准化的错误处理
|
||
- 完整的文档和管理脚本
|
||
|
||
现在你可以使用 `create-compose-package-windows-en.bat` 来创建Windows版本的部署包,不会再遇到编码问题!🎉
|