太阳当空照-Windows服务化方式脚本封装sc指令(上)

简介: 太阳当空照-Windows服务化方式脚本封装sc指令

前言

接过上一章节,sc.exe进行Windows中,进行系统程序服务化的操作方式不难发现,直接进行基础工具服务化操作,一个是人狠话不多,出错不好说,一个就是不太优雅,每回都需要自己手动去输入配置信息,例如:sc [Service name] 程序路径,服务方式等内容,啥也别说,改成脚本引导,交互式输入,以下是脚本的几个需求:

  • 启动脚本出现输入引导信息
  • 输入相关服务配置
  • 完成对目标程序服务操作(注册、启动、停止和删除)

准备作业

脚本是啥?在系统中又叫批处理脚本,用于实现系统使用过程中,通过系统Dos指令实现部分功能需求的可执行文件,相关交互指令被称之为批处理脚本,此处简称脚本,在Windows系统中,脚本文件常见以.bat.cmd作为文件后缀

要写当然啥不会肯定不行,先简单学一学指令,笔者整理了相关的基本语法,如下:

变量

变量的主要目的是为了接受在批处理文件外部接受输入值和处理文件内部对变量的设置和使用

系统变量

%CD% 获取当前路径
%PATH% 获取命令搜索路径/全局环境变量中的PATH
%DATE% 获取当前日期
%TIME% 获取当前时间
%ERRORLEVEL% 获取上一个命令的执行结果码

输出内容echo

>echo %DATE%
2021/07/16 周五

设置变量(局部)set

set 变量名称=变量值
>set test=12
>echo %test%
12

基本指令

以下介绍仅仅包含当前需要实现的批处理文件需要用到的指令,并不是完整指令细化,具体参考可以阅读对应的微软文档参考链接

注释

::注释内容

输入

参考链接:https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/set_1

set

显示、设置或删除 cmd.exe环境变量。 如果不使用参数,则 set 将 显示当前环境变量设置

set [<variable>=[<string>]]
set [/p] <variable>=[<promptString>]
set /a <variable>=<expression>

<variable>指定要修改或设置的环境变量名称

<string>实际需要给变量设置的变量值

>set test=aaa
>echo %test%
aaa

/p将用户输入行作为对应需要设置的变量的值

创建一个setcase.batCHCP 65001目的是为了设置当前cmd窗口的当前代码页设置为utf-8,同时把bat脚本编码设置为utf-8内容如下:

@echo off
CHCP 65001
set /p uname=请输入用户名称:
echo 用户名:%uname%

执行sctest.bat

>sctest.bat
Active code page: 65001
请输入用户名称:张珊
用户名:张珊

需要注意的是,如果执行后输出内容为中文乱码,那么极为可能是,当前bat的文件编码和cmd窗口编码不一致造成,可通过CHCP 编码进行编码统一,上述案例设置的是65001表示输出脚本当前窗口编码为utf-8,和bat的编码保持一致

输出

echo

参考链接:https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/echo

显示消息或打开或关闭命令回显功能。 如果不使用参数, echo 将显示当前的回显设置,默认为on

echo [<message>]
echo [on | off]

显示信息(输出信息)

>echo Hello World
echo Hello World

控制是否显示命令提示符,在dos环境下直接执行该指令有效,为防止在bat文件中显示

echo [on | off]

执行echo用于显示当前回显状态

>echo 
ECHO 处于打开状态。

创建一个echo.bat文件内容如下:

echo hellw world
pause 

保存后,双击执行,输出结果如下:

bat文件路径>echo hellw world
hellw world
bat文件路径>pause

关闭回显,防止批处理文件中的所有命令 (包括 echo off命令) 在屏幕上显示在批处理文件类型的第一行,echo.bat修改如下:

@echo off
echo hellw world
pause

保存后,直接双击bat执行效果如下:

hellw world
请按任意键继续. . .

暂停

pause

参考链接:https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/pause

暂停批处理程序的执行,并显示提示, Press any key to continue . . .,按任意键继续执行后续的执行

>pause
请按任意键继续. . .

退出

exit

参考链接:https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/exit

退出命令解释器或当前批处理脚本

exit [/b] [<exitcode>]

/b为退出当前批处理脚本,而不是退出cmd.exe,如果从批处理脚本外部执行或直接执行批处理脚本,则退出 cmd.exe

<exitcode>指定数值, 如果指定了 /b ,则 ERRORLEVEL环境变量设置为该数字; 如果要退出命令解释器,则进程退出代码将设置为该数字

批处理脚本exit.bat内容如下:

@echo off
echo hellw world
exit /b  

直接双击运行bat,看似无反应,实际是脚本执行结束后,退出了了

通过命令提示符切换到改exit.bat所在目录下,执行exit.bat,结果输出如下:

>sctest.bat
hellw world
>

命令提示符cmd.exe并未退出

判定

if

参考链接:https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/if

在批处理程序中执行条件处理

if [not] ERRORLEVEL <number> <command> [else <expression>]
if [not] <string1>==<string2> <command> [else <expression>]
if [not] exist <filename> <command> [else <expression>]

启用了命令扩展,语法如下:

if [/i] <string1> <compareop> <string2> <command> [else <expression>]
if cmdextversion <number> <command> [else <expression>]
if defined <variable> <command> [else <expression>]

not当条件为false,对应判定语句才能够执行内部的相关操作

>if not false==true echo the condition is false
the condition is false

errorlevel表示cmd.exe上一个执行程序的返回的退出代码对应的数字

>echo %errorlevel%
0
>if not %errorlevel%==1 echo the condition is false
the condition is false

exist判定特定路径文件是否存在,存在则返回true,命令提示符工作目录下存在文件sctest.bat

>if exist sctest.bat  echo the condition is true
the condition is true

else <express>不符合if条件判定时的其他情况,执行对应的相关操作语句,执行语句需要用()进行囊括在一个块中,否则else将执行无效

>if exist echo.bat  (echo the condition is true) else (echo the condition is false)
the condition is false


相关文章
|
2月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
77 0
|
3月前
|
Python Windows
python之windows脚本启动bat
python之windows脚本启动bat
|
4月前
|
安全 Shell Windows
记windows自定义bat脚本自启动
【8月更文挑战第27天】在Windows系统中,可让自定义bat脚本自启动的方法有两种:一是利用“启动”文件夹,通过创建bat脚本的快捷方式并将其放置于该文件夹;二是使用任务计划程序,创建一个启动时触发的任务来运行bat脚本。需确保脚本正确安全,避免对系统产生不良影响。
272 0
|
6月前
|
关系型数据库 MySQL 数据安全/隐私保护
windows系统bat批处理 mysql 脚本启动关闭
windows系统bat批处理 mysql 脚本启动关闭
226 3
|
6月前
|
Windows
windows系统vbs脚本 恶搞关不掉的窗口 以及解决办法
windows系统vbs脚本 恶搞关不掉的窗口 以及解决办法
136 2
|
6月前
|
Windows
windows系统vbs脚本 恶搞将系统搞崩 死机 以及解决
windows系统vbs脚本 恶搞将系统搞崩 死机 以及解决
62 1
|
6月前
|
Windows
windows系统vbs脚本 提取文件夹中的所有文件名
windows系统vbs脚本 提取文件夹中的所有文件名
47 0
|
6月前
|
应用服务中间件 nginx Windows
windows系统bat批处理 管理nginx启动 nginx脚本管理bat脚本管理生命周期windows一键nginx启动
windows系统bat批处理 管理nginx启动 nginx脚本管理bat脚本管理生命周期windows一键nginx启动
137 0
|
6月前
|
Java Windows
windows bat脚本实现快速配置JDK 环境变量
windows bat脚本实现快速配置JDK 环境变量
289 0
|
6月前
|
Linux 网络安全 Windows
ssh连接缓慢 ssh连接失败问题 Linux 脚本解决ssh连接缓慢问题,windows解决本地ssh连接失败
ssh连接缓慢 ssh连接失败问题 Linux 脚本解决ssh连接缓慢问题,windows解决本地ssh连接失败
72 0