[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[代码合集] 关于:批处理多个bat交互过程中全局变量以及引入全局CMD窗体设置的探讨

【背景】
准备用【AutoPlay Menu Builder】写一个光盘引导程序,里面的按钮调用光盘中写好的一组批处理文件实现SQL SERVER 数据库的备份、改名、分离、附加、服务启停、MDF文件的拷贝、SQL文件对数据库的更新,服务端应用软件和客户端应用软件的部署及更新,等等......
-----------------------------------------------
【思路】
我的思路是
【1】-在光盘的目录中创建了一个【script】的脚本文件夹,用1组bat文件相互调用,每一个bat文件相对独立的实现业务需要,再通过绘制了批处理菜单相当于UI的bat文件去组织这些独立的功能bat,最终形成一个批处理的部署安装程序

【2】-将冗余的代码部分全部整理到独立的bat文件中去,通过CALL XXX.bat的方式,相当于ASP开发中的include代码的方式,加载进去就可以了
---------------------------------------------
【问题】
我发现多个BAT文件相互调用,通过CALL指令传参管理,多有不便,于是想用一个独立的bat文件去管理全局变量,将来维护也方便,只要需要的功能性bat或菜单UI层面的bat加载这个全局变量的bat就可以了,不过还是不确定有没有更优雅的解决方案,请各位大佬不吝赐教,谢谢!!!!

*********************************
【我的解决方案】如下:
*********************************
文件结构和关系说明:
【1】setup.bat-----------------------------------------【负责主界面的绘制】
【2】do_SetParameterForConnectDataBase.bat-----【负责独立功能实现】

<其他业务实现的bat文件....略>

【3】getDeclareGlobalVariables.bat--------------【负责定义全局变量】
【4】setConsoleOperation.bat--------------------【负责定义命令行窗口的设置信息,使引用的bat统一风格】

...........................................................

【代码部分】------》》见楼下

附件好像,放不上去啊,放个百度网盘吧
链接:https://pan.baidu.com/s/1vqMrhC3FhaHQj1sGora9mw
提取码:2021
【script-setup.zip】32.8kb

TOP

【1】setup.bat-----------------------------------------【负责主界面的绘制】
  1. @REM 加载CMD窗口的基础配置信息
  2. CALL "%~dp0\setConsoleOperation.bat" "isDebug"
  3. @REM 启用【扩展本地环境变量延迟】
  4. setlocal enabledelayedexpansion
  5. @REM 加载CMD窗口的全局变量信息,并赋值初始化数据的作用
  6. CALL "%~dp0\getDeclareGlobalVariables.bat"
  7. rem ................ 略
复制代码
【2】do_SetParameterForConnectDataBase.bat-----【负责独立功能实现】
  1. @REM 加载命令号的基础配置信息
  2. CALL %~dp0\setConsoleOperation.bat
  3. @REM 启用【扩展本地环境变量延迟
  4. setlocal enabledelayedexpansion
  5. @REM 加载CMD窗口的全局变量信息,并赋值初始化数据的作用
  6. CALL "%~dp0\getDeclareGlobalVariables.bat"
  7. @REM ::Start=================================相当于BAT的Main函数或者构造函数:开始=================================
  8. CALL :CASE_MainMenu
  9. @echo 更新完成!请按任意键退出批处理程序!
  10. pause>nul
  11. REM 退出之前设置全局变量给上层BAT文件复用
  12. endlocal & (
  13.     SET dbHost=%dbHost%
  14.     SET dbUserID=%dbUserID%
  15.     SET dbPassword=%dbPassword%
  16.     SET dbName=%dbName%
  17. )
  18. GOTO END_CASE
  19. ::exit /B
  20. rem ................ 略
复制代码

TOP

【3】getDeclareGlobalVariables.bat--------------【负责定义全局变量】
  1. @REM 定义常量(BAT Application 信息)
  2. IF not defined APP_Name SET APP_Name=干部人事档案信息采集与管理系统
  3. IF not defined APP_Program SET APP_Program=批处理安装程序
  4. IF not defined APP_Version SET APP_Version=V2.2.4
  5. IF not defined APP_VersionDate SET APP_VersionDate=20210701
  6. IF not defined APP_Company SET APP_Company=宁夏璞石信息技术服务有限责任公司
  7. @REM 初始化常量(BAT与 BAT 之间交互过程中将根据用户设置,将临时修改以下变量的内容,声明周期为本母BAT的声明周期)
  8. IF not defined dbHost SET dbHost=127.0.0.1
  9. IF not defined dbUserID SET dbUserID=sa
  10. IF not defined dbPassword SET dbPassword=qq123456
  11. IF not defined dbNdbNameame SET dbName=PAI_DB_V2_2_4
  12. IF not defined db_mdf_path SET db_mdf_path=
  13. IF not defined db_ldf_path SET db_ldf_path=
  14. IF not defined db_mdf_path_1 SET db_mdf_path_1=D:\DataBase\PAI_DB_V2_2_4.mdf
  15. IF not defined db_ldf_path_1 SET db_ldf_path_1=D:\DataBase\PAI_DB_V2_2_4_log.ldf
  16. IF not defined db_mdf_path_2 SET db_mdf_path_2=D:\DataBase\PAI_DB_V2_2_4_TEST.mdf
  17. IF not defined db_ldf_path_2 SET db_ldf_path_2=D:\DataBase\PAI_DB_V2_2_4_TEST_log.ldf
  18. IF not defined db_name_1 SET db_name_1=PAI_DB_V2_2_4
  19. IF not defined db_name_2 SET db_name_2=PAI_DB_V2_2_4_TEST
  20. IF not defined sqlfile SET sqlfile=%~dp0\do_BackUpDataBase.sql
  21. IF not defined FileTmp SET FileTmp=%temp%\sqldata.txt
  22. IF not defined bak_Path SET "bak_Path=C:\backup\"
复制代码

TOP

【4】setConsoleOperation.bat--------------------【负责定义命令行窗口的设置信息,使引用的bat统一风格】
  1. @REM 关闭屏幕回显
  2. @echo off & PUSHD %~DP0
  3. @REM  936 GBK(一
  4. @REM 437 美国英语
  5. @REM 65001 utf-8
  6. ::CHCP 936
  7. ::CHCP 65001
  8. @REM 设置全局变量[Debug:YES][Release:NO]
  9. SET "isDebug=YES"
  10. if "%~1"=="isDebug" SET "isDebug=%isDebug%"
  11. @REM 设置窗休最大
  12. MODE CON COLS=70 LINES=100
  13. @rem 设置显示窗休
  14. title 【人事档案系统批处理安装程序】--璞石信息
  15. rem 代码段标记
  16. :menuMain
  17. ::cls
  18. @rem 改为绿色字体
  19. color 0A
  20. set rr="HKCU\Console\%%SystemRoot%%_system32_cmd.exe"
  21. reg delete %rr% /f>nul
  22. reg add %rr% /v "WindowPosition" /t REG_DWORD /d 0x00000000 /f>nul
  23. reg add %rr% /v "WindowSize" /t REG_DWORD /d 0x00640032 /f>nul
  24. reg add %rr% /v "ScreenBufferSize" /t REG_DWORD /d 0x012C0035 /f>nul
  25. reg add %rr% /v "FaceName" /t REG_SZ /d "黑体" /f>nul
  26. reg add %rr% /v "FilterOnPaste" /t REG_DWORD /d 0x00000001 /f>nul
  27. reg add %rr% /v "FontFamily" /t REG_DWORD /d 0x00000036 /f>nul
  28. reg add %rr% /v "FontSize" /t REG_DWORD /d 0x00140000 /f>nul
  29. reg add %rr% /v "FontWeight" /t REG_DWORD /d 0x00000190 /f>nul
  30. reg add %rr% /v "ForceV2" /t REG_DWORD /d 0x00000001 /f>nul
  31. reg add %rr% /v "FullScreen" /t REG_DWORD /d 0x00000000 /f>nul
  32. reg add %rr% /v "HistoryBufferSize" /t REG_DWORD /d 0x00000032 /f>nul
  33. @REM (1)点阵字体(较小)
  34. @REM 3×5-------00050003
  35. @REM 5×8-------00080005
  36. @REM 6×12------000c0006
  37. @REM 6×13------000d0006
  38. @REM 8×16------00100008
  39. @REM 8×18------00120008
  40. @REM 10×20-----0014000a
  41. @REM 10×22-----0016000a
  42. @REM 12×27-----001b000c
  43. @REM (2)新宋体(较大)黑体
  44. @REM 6----00060000---3*7
  45. @REM 8----00080000---4*9
  46. @REM 10---000a0000---5*11
  47. @REM 12---000c0000---6*14
  48. @REM 14---000e0000---7*16
  49. @REM 16---00100000---8*18
  50. @REM 18---00120000---9*21
  51. @REM 20---00140000---10*23
  52. @REM 24---00180000---12*27
  53. @REM 28---001c0000---14*32
  54. @REM 36---00240000---18*41
  55. @REM 72---00480000---36*82
复制代码

TOP

返回列表