傻瓜bat脚本实现包管理和包引用——如何优雅的管理bat脚本集(一)
傻瓜bat脚本实现包管理和包引用——如何优雅的管理bat脚本集(一)
因为管理公司AD林需要,比如远程数据库的热备,冷备等,本来是使用付费工具实现的,但是系统重装以后丢失了注册码,又不愿意重新付费,所以不得不自己写个bat脚本来常驻实现,然后bat脚本多了以后,又想如何优雅的管理。。。
同系列文章目录
第1部分 傻瓜bat脚本实现的远程数据备份
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 傻瓜bat脚本实现包管理和包引用——如何优雅的管理bat脚本集(一)
- 同系列文章目录
- 吐槽大会
- 一、思路&实现&复杂
- 1、实现引入库
- 1.1、封装脚本文件读取接口
- 1.2、设计简单的交互界面,用户可选择root路径下(相对路径关系root为main.bat的根目录)指定名称的脚本来运行
- 1.3、设置暂存区和垃圾回收机制
- 2、实现包管理
- 2.1、封装包管理woker脚本:其目的是实现根目录下所有的脚本读取,并提取脚本文件名,自动生成本地闭包的脚本调用参数文件。
- 2.2、包管理main脚本:从暂存区读取woker脚本中生成的参数文件,实现对根目录下方的脚本统一化管理,并配合1.1的调用接口在1.2的交互界面实现随心调用
- 二、实现步骤
- 1.封装脚本文件读取接口(重新打开一个窗口)
- 2.封装脚本文件读取接口,并传参(重新打开一个窗口)
- 总结
- 测试代码下载地址:
吐槽大会
测试代码下载地址:
实现bat脚本封装接口,可以自动判断是否需要向下传参
上次说到要实现增量备份,这个实现方式已经写了,但是代码部分由于我自己用不到,所以没提供下载,这个代码下次我自己用到了再补。
时隔一年,企业域管理林的时候遇到脚本散乱,分开读取太麻烦的问题,所以不得不再写个聚合读取脚本,比如像下面这样
所以首先要建立一个可以交互的main界面,然后封装一个bat版本的调取另一个bat文件的接口,所以可能有以下三种调取形式:
情景一:两个bat文件在同一个目录下
情景二:两个bat文件不在同一个目录下
情景三:开启一个新的cmd窗口来运行另一个bat文件
百度了一下在CSDN找到下面这个文章
「雨临Lewis原创」- 浅谈如何在bat文件中调用另一个bat文件
提示:以下是本篇文章正文内容,下面案例可供参考
一、思路&实现&复杂
和所有的编程语言一样,bat是可以实现包的引入和管理的(所有的高级语言都这样),所以bat脚本的管理的高级应用其实就是包管理和包引用。
但越是这样 ,代码的复杂程度就越高
1、实现引入库
1.1、封装脚本文件读取接口
1.2、设计简单的交互界面,用户可选择root路径下(相对路径关系root为main.bat的根目录)指定名称的脚本来运行
1.3、设置暂存区和垃圾回收机制
2、实现包管理
2.1、封装包管理woker脚本:其目的是实现根目录下所有的脚本读取,并提取脚本文件名,自动生成本地闭包的脚本调用参数文件。
2.2、包管理main脚本:从暂存区读取woker脚本中生成的参数文件,实现对根目录下方的脚本统一化管理,并配合1.1的调用接口在1.2的交互界面实现随心调用
二、实现步骤
上面所有的内容都是听君一席话犹如听君一席话,完全不用管,注意下面就好
1.封装脚本文件读取接口(重新打开一个窗口)
命名规则:为了格式化自动化脚本,脚本的name必须存放在对应name的文件夹下。比如交互界面输入参数atSql,读取接口应该读取打开的脚本相对路径应该是
:getRunBat
rem 封装bat的调用不同目录的脚本的接口
@echo off
set choice=
set /p choice= 请输入需要调用的脚本名:
rem %~dp0取值默认自带后缀\
set root=%~dp0
REM 指定脚本库的相对位置,拼接成脚本库路径设置到变量中
set batwkdir= %root%tools\%choice%\
REM 执行调用另一个窗口
echo now run the "%choice%".bat
cd /d %batwkdir%
start "to Run bat如果没用执行权限请设置成管理员模式" cmd /k call %choice%.bat
pause
cls
goto menu
测试实现的效果如下:
2.封装脚本文件读取接口,并传参(重新打开一个窗口)
重点在这里,要能传参,把1上面的代码改变一下,增加传参的变量,传参到下一个脚本
6.Call 命令 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签 。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。 语法:
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]] 参数:
[Drive:}[Path] FileName 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。 7.start 命令 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数 执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE不等应用程序终止就返回命令提示。如果在命令脚本 内执行,该新行为则不会发生。
参考文件:《Windows .bat 脚本简单用法介绍》
REM 在start ts.bat 111 这种形式会把参数111传入下一个被调用的脚本,
要传参救用start来呼起下一个脚本,不需要传参的直接用call呼起效率更高
cmd /k start %choice%.bat %choiceTT%
套娃来了
:getRunBat
rem 封装bat的调用不同目录的脚本的接口
@echo off
set choice=
set /p choice= 请输入需要调用的脚本名:
set choiceTT=
set /p choiceTT= 请输入需要参数,如没用可以直接回车:
rem %~dp0取值默认自带后缀\
set root=%~dp0
REM 指定脚本库的相对位置,拼接成脚本库路径设置到变量中
set batwkdir= %root%tools\%choice%\
REM 执行调用另一个窗口
echo now run the "%choice%".bat
cd /d %batwkdir%
REM 在start ts.bat 111 这种形式会把参数111传入下一个被调用的脚本,
REM 要传参需要用start来呼起下一个脚本,不需要传参的直接用call呼起效率更高
REM 下面的命令其实有两条套娃命令,第一条start调用一个新cmd,然后传参为/k start %choice%.bat
REM 第二条start调用一个%choice%.bat,然后传参为%choiceTT%
start "to Run bat如果没用执行权限请设置成管理员模式" cmd /k start %choice%.bat %choiceTT%pause
cls
goto menu
总结
如何优雅的管理bat代码,从缩小main脚本中的代码开始:
比如一个使用的bat交互脚本,有140行,其中包括main小节,交互界面小节,和其他功能小节,这样太多了不优雅,如何优雅的使用:
1、首先入口bat只需要保留mani小节和交互小节
这样基本上一个入口bat只需要10多行代码了
2、然后入口bat上只需要一次性注册有关变量即可,比如直接注册好%temp%,%logs%,%choice%等,这样自然就能很优雅的关闭内存并导出统一的log记录
3、入口bat的调取脚本接口要能传参,这个传参就是套娃,可以依次传参实现更多的业务。(bat脚本传参是包调用的核心)
例子:main 调用getFiles 传参 111
等于 main 调用 getFiles脚本中符合111规则的小节
下面是接收传参的代码
REM 在start ts.bat 111 这种形式会把参数111传入下一个被调用的脚本,
REM 要传参需要用start来呼起下一个脚本,不需要传参的直接用call呼起效率更高
REM 下面的命令其实有两条套娃命令,第一条start调用一个新cmd,然后传参为/k start %choice%.bat
REM 第二条start调用一个%choice%.bat,然后传参为%choiceTT%
start "to Run bat如果没用执行权限请设置成管理员模式" cmd /k start %choice%.bat%choiceTT%
测试代码下载地址:
实现bat脚本封装接口,可以自动判断是否需要向下传参
傻瓜bat脚本实现包管理和包引用——如何优雅的管理bat脚本集(一)相关推荐
- android批处理脚本,BAT批处理一键生成APK包脚本分享
BAT批处理一键生成APK包脚本分享 将本bat放到cocos2dx目录下你的工程的project.android下(需修改变量). ASmaker 用来将Resources文件夹下的lua文件批量加 ...
- python脚本开头怎么写_浅谈Python脚本开头及导包注释自动添加方法
浅谈Python脚本开头及导包注释自动添加方法 1.开头:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定 #!/usr/bin/python 是用来 ...
- 一种混合包管理和容器管理方案,及在tinycorelinux上安装containerd和openfaas
本文关键字:在tinycorelinux上装docker,virtual appliance vs virtual appstack,no cgroup mount found in mountinf ...
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(二)(包管理和环境管理)
包管理和环境管理(以下操作也可在anaconda界面,进行可视化操作) 包管理:包的安装.卸载.更新和查找等等 conda命令 conda install <包名称列表> 同时安装多个包 ...
- uPython - 分发包、包管理和部署应用程序 - 以 microdot 为例
分发包.包管理和部署应用程序 - 以 microdot 为例 目录 分发包.包管理和部署应用程序 - 以 microdot 为例 概述 安装 mip 手动安装包 - microdot 参考资料 正如& ...
- 脚本批量打包渠道包研究
上一篇文章中我们相惜讨论了Assetbundle的原理,如果对原理还不太了解的朋友可以看这一篇文章:Unity3D研究院之Assetbundle的原理(六十一) 本篇文章我们将说说assetbundl ...
- linux系统软件包分类,Linux软件包管理和编译安装
软件包介绍 开源软件最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在GNU/Linux上运行的软件.用户急需系统能提供一种更加便利的方法来管理这些软件,当Debian诞生时,这样一 ...
- js文件 import java类_实现JS脚本导入JAVA类包
本例演示怎样通过JS脚本导入JAVA类包,我们创建JS引擎后,通过eval方法调用 getScript() ,JS脚本中importPackage(java.util)为导入包. package aj ...
- 让SH/BAT脚本定位到运行目录的相对位置,实现其脚本可在任意运行目录下被正确执行...
让SH/BAT脚本定位到运行目录的相对位置 实现其脚本可在任意运行目录下被正确执行 在Linux下的bash脚本 #!/bin/bash cd `dirname $0` 在Windows下的BAT脚本 ...
最新文章
- 一个97年的IT人创业历程中的总结和感悟
- Post Content_Length exceeds the limit
- Linux部署禅道环境
- sql server 多条记录数据合并为一条_如何利用Python实现SQL自动化?
- 关于TCP/IP必须知道的几个基础问题
- (转)如何查看java本地方法
- [转]VI/VIM的键盘图
- 星星之火-57:前传接口 CPRI的速率、能力、小区带宽之间的映射关系
- Android App混合开发
- Kaggle注册及绑定手机号
- 一文读懂 HBase 使用场景
- 域名泛解析,二级域名转向问题- -完美解决
- STM32掌机教程8,背景音乐
- Todd Lammle's CCNA IOS Commands Survival Guide
- iOS开发中常用的方法
- Android 实现定位
- python网课期中答案_中国大学python答案网课期末慕课MOOC答案
- Kejin Player (概率DP)hdu6656
- 干掉Vivado幺蛾子(2)-- 快速替换debug probes
- tableau-去掉ABC方法