运维必学 | 初识介绍-从零开始学Windows批处理(Batch)编程系列教程

2023-10-31 17:15:33 浏览数 (1)

本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。

0x00 前言简述

描述: 【WeiyiGeek】作者作为一名运开(万金油)学习的东西又多又杂,好处就是知识面广,缺点是多而不精,所以作者痛定思痛,把当前自己岗位职业所需的技术知识重新梳理,在帮助自己的同时又帮助各位想从事运维相关的工作职业的朋友。

作者WeiyiGeek将对Windows BAT批处理编程发布学习系列教程,BAT批处理在进行Windows服务器运维中占有举足轻重的地位,能非常方便帮助我们操作管理Windows,当然在可能有的朋友会说现在在windows Server 2019之后通常会采用PowerShell编写对应的管理脚本,还有必要学习Bat,此处作者认为还是有必要的,因为企业中还有一部分存量的业务仍然跑在Window Server 2008 乃至 2003 在此系统中的PowerShell 版本通常是 v1.0 且功能有限,更多的是采用BAT批处理所以学习Windows批处理还是有必要的,其次学习BAT批处理也能加深Windows Dos相关命令的学习,如果你还是一名网络安全人员也是必须要学习了解的。

话说得有点多了,总之就一句话如果感觉此文不错,请多多点赞、转发、在看、赞赏支持,以及关注【全栈工程师修炼指南】公众号吧。

若需一起交流学习,请关注后回复【微信交流群】即可共同学习,共同进步。

温馨提示: Window Batch 批处理系列教程示例脚本可访问作者Github仓库中DevelopLearnig的项目,✈ 直达 -> https://github.com/WeiyiGeek/DevelopLearnig/tree/main/TerminalScript/bat


0x01 什么是批处理(Batch)?

描述: 批处理(Batch)也称为批处理脚本。顾名思义, 批处理就是对某对象进行批量的处理, 通常被认为是一种简化的脚本语言, 它应用于DOS和Windows系统。

目前Windows中的批处理包含两类:Windows DOS (BAT) 批处理PowerShell 批处理

  • DOS 批处理:基于Windows DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。
  • PowerShell 批处理 : 基于强大的.NET,是一种用于 Windows 操作系统的脚本语言和命令行工具。

此处作者暂时介绍本系列的主人公Windows bat(批处理),在后续作者也将会总结推出 PowerShell 编程系列系列学习入门。

Q: 什么是Windows bat(批处理)? Windows bat(批处理)是一种用于 Windows 操作系统的脚本语言和命令行工具,它使用扩展名为 .bat.cmd 的文件,其中包含一系列的命令和指令,用于自动化执行一组任务或操作。包括但不限于文件和文件夹的创建、复制、删除、移动,运行程序和命令,设置环境变量,修改注册表等

除此之外,Windows bat 批处理脚本使用一种简单的命令语法,可以包含条件判断 if、循环 for、变量定义 set、 跳转 goto 等基本编程功能如同C、Basic等高级语言一样,它适用于简单的自动化任务和批量处理操作,例如批量重命名文件、批量修改文件内容等。如果还需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。

综上所述,Windows bat 批处理脚本在系统管理和日常操作中非常有用,可以提高工作效率和简化重复性任务的执行。它也可用于创建简单的安装程序或自动化脚本,方便进行系统配置和部署。

Q: 如何学习Windows bat(批处理)? 描述: 此处作者学习DOS批处理一共分为4️⃣个部分,第一部分是批处理的专用命令,第二部分是特殊的符号与批处理,第三部分是批处理与变量,第四部分是企业中完整的BAT批处理编程案例。

好,开始进入正题吧,从入门到加薪!


0x02 批处理(Batch)基础

描述:此处我们先从下述几个批处理(Batch)命令学起,如 echo@pauseremcallstart(小技巧:用::代替rem)以及cls、``,它们都是批处理文件最常用的命令,通过简单的示例看一下bat脚本。

echo : 显示显示此命令后的字符串

代码语言:javascript复制
# <!-- hello-bat.bat -->
echo.    # 表示换行输出,注意点是紧接着echo的没有空格
echo off # 表示在此语句后所有运行的命令都不显示命令行本身. 
(echo www.weiyigeek.top)

温馨提示: 所以为了不显示命令本身,一般都会再批处理头部加上@echo off,这样便不会显示命令本身了.


偷偷的告诉你哟?极客全栈修炼】微信小程序已开放

可直接在微信里面直接浏览博主文章哟,后续将上线更多有趣的小工具。


@ :表示运行时不显示此行原始命令

描述: 此命令与 echo off 相似,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)

代码语言:javascript复制
@echo off
@echo "不会输出原始的 echo 命令"

pause : 运行此句会暂停批处理的执行

温馨提示: 运行此命令时会在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续

示例1:未加 @ 命令 以及 echo off 指令执行bat命令

代码语言:javascript复制
# <!--1.echo-pause.bat -->
echo "Hello world! Windows Bat."
(echo "Author: weiyigeek")
echo.
echo "Blog: blog.weiyigeek.top"
pause

示例2.使用 echo off 指令 以及 @ 命令 的bat批处理,(温馨提示脚本若有中文,可以将bat文件内容编码格式设置GBK,或者将将终端编码设置为UTF-8, 例如 chcp 65001 后续介绍)

代码语言:javascript复制
@echo off
echo "Hello world! Windows Bat."
echo "使用 @ 与 echo off 指令。"
@pause

rem :表示此命令后的字符为解释行 (:: 也是注释)不执行相当于程序中的注释。

代码语言:javascript复制
@echo off
echo "Hello world! rem."
echo "使用 @ 与 echo off 指令。"
rem echo 我是注释不执行1
:: echo 我是注释不执行2
== echo 我不是注释要执行
@pause

call :调用另一个批处理文件

描述: 使用call命令调用其他批处理文件,如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令,温馨提示:同一目录可以不加路径

代码语言:javascript复制
@echo off
echo "开始调用,Call 到 notepad.bat
call notepad.bat
echo "调用完毕,回到 %0.bat"
pause

start: 启动一个单独的窗口运行指定的程序或命令

描述:与call命令不同得是,它不依托于父shell的即不会阻塞

代码语言:javascript复制
@echo off
echo "从这里开始start到notepad.bat"
start notepad.bat
echo "start会独立于cmd父Shell,%0.bat"
pause

goto : 跳转到指定片段

描述: GOTO 即为跳转的意思,在批处理中允许以“:XXX”来构建一个标号,然后用GOTO :标号直接来执行标号后,标号用“:字符串”来定义,标号所在行不被执行。

示例1.goto 命令跳转到指定片段处,并依次执行

代码语言:javascript复制
@echo off

:TestG
REM "# GOTO跳转案例"
whoami && hostname

:TestT
date /t
pause
REM # 可以多次调用TestG标签后的批处理

goto TestG

温馨提示:上述示例代码脚本会产生死循环效果。

示例2.goto 命令多用在判断和分支之中,此处作为了解即可,后续我们会学习到条件判断

代码语言:javascript复制
@echo off
if {%1}=={} goto noparms
if {%2}=={} goto noparms

@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end

:end
echo "程序结束!!"
pause

timeout :脚本延迟执行

描述: 此命令主要用于脚本延迟执行,其类似于PowerShell中的sleep方法以及Linux中sleep命令。 语法示例

代码语言:javascript复制
# 语法
TIMEOUT [/T] timeout [/NOBREAK]

# 参数列表:
/T        timeout       指定等候的秒数,有效范围从 -1 (表示无限期地等待按键)到 99999 秒。
/NOBREAK                忽略按键并等待指定的时间。

示例演示:

代码语言:javascript复制
# 1.按任意键停止超时
c:WindowsSystem32>timeout /T 10 & whoami
等待  0 秒,按一个键继续 ...
securityweiyigeek

# 1.按ctrl c停止超时
c:WindowsSystem32>timeout /T 5 /NOBREAK & whoami
等待 0 秒,按 CTRL C 退出 ...
securityweiyigeek

cls : 清理屏幕显示

描述: 此命令用于清理windows cmd中界面显示的数据,即达到清屏的效果, 该命令使用非常简单执行cls即可。

代码语言:javascript复制
echo "我是将会被清理掉的字符串"
CLS
echo "我是清理屏幕后执行的"

type :显示文本文件的内容

描述:此命令用于在cmd中打开文本文件并输出内容到终端, 该命令使用也是非常的简单。

语法参数

代码语言:javascript复制
TYPE [drive:][path]filename

示例演示:

代码语言:javascript复制
echo "weiyigeek.top" >> weiyigeek.txt
type weiyigeek.txt

本文至此完毕,更多技术文章请访问作者博客,尽情等待下篇好文!

原文地址: https://blog.weiyigeek.top/2023/6-25-752.html

0 人点赞