写点什么

1. 从零开始学 Windows 批处理编程系列之基础介绍

  • 2023-10-31
    重庆
  • 本文字数:5007 字

    阅读完需:约 16 分钟

1.从零开始学Windows批处理编程系列之基础介绍

0x00 前言简述

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


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


话说得有点多了,总之就一句话如果感觉此文不错,请多多点赞、转发、在看、赞赏支持,以及关注【全栈工程师修炼指南】吧。若需一起交流学习,请关注后回复【交流群】即可共同学习,共同进步。


温馨提示: Windows 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 等高级语言一样,它适用于简单的自动化任务和批量处理操作,例如批量重命名文件、批量修改文件内容等。如果还需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。


简单的说,批处理文件是允许MS-DOS和Windows用户创建文件以快速执行长任务的程序


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


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


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


0x02 批处理(Batch)基础

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


温馨提示: 由于中文系统中 CMD 默认编码是 GBK 的,所以编写的脚本文件编码也要是 GBK 的,若不是可能会出现中文乱码,即使使用已经通过 CHCP 命令设置 65001,请各位看看非常注意。

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

# <!-- hello-bat.bat -->(echo www.weiyigeek.top)echo off # 表示在此语句后所有运行的命令都不显示命令行本身. 
# 在批处理脚本中,可以使用特殊字符<nul与echo命令结合来生成回车符。echo. # 表示换行输出,注意点是紧接着echo的没有空格echo.^ # 效果同上echo hello<nul # 使用 <nul 方式换行echo world
复制代码


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

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

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


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

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

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


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


# <!--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 后续介绍)


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


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

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

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

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


@echo offecho "开始调用,Call 到 notepad.batcall notepad.batecho "调用完毕,回到 %0.bat"pause
复制代码


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

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


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


goto : 跳转到指定片段

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


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


@echo off
:TestGREM "# GOTO跳转案例"whoami && hostname
:TestTdate /tpauseREM # 可以多次调用TestG标签后的批处理
goto TestG
复制代码


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


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


@echo offif {%1}=={} goto noparmsif {%2}=={} goto noparms
@Rem check parameters if null show usage:noparmsecho Usage: monitor.bat ServerIP PortNumbergoto end
:endecho "程序结束!!"pause
复制代码


timeout :脚本延迟执行

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


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


示例演示:


# 1.按任意键停止超时c:\Windows\System32>timeout /T 10 & whoami等待  0 秒,按一个键继续 ...security\weiyigeek
# 1.按ctrl+c停止超时c:\Windows\System32>timeout /T 5 /NOBREAK & whoami等待 0 秒,按 CTRL+C 退出 ...security\weiyigeek
复制代码

cls : 清理屏幕显示

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


echo "我是将会被清理掉的字符串"CLSecho "我是清理屏幕后执行的"
复制代码

type : 显示文本文件的内容

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


语法参数


TYPE [drive:][path]filename
复制代码


示例演示:


echo "weiyigeek.top" >> weiyigeek.txttype weiyigeek.txt
复制代码



0x03 批处理(Batch)常用命令

描述: 下面列举了在 Batch 编程中常用命令,如果有关某个命令的详细信息,请键入 HELP 命令名,或者参考作者总结的 Windows 常用命令。


批处理关于循环判断分支的命令


  • IF 在批处理程序中执行有条件的处理过程。

  • FOR 为一套文件中的每个文件运行一个指定的命令。

  • TITLE 设置 CMD.EXE 会话的窗口标题。

  • SHIFT 调整批处理文件中可替换参数的位置。

  • START 打开单独视窗运行指定程序或命令。

  • GOTO 将 Windows 命令解释程序指向批处理程序中某个带标签的行。

  • BREAK 设置或清除扩展式 CTRL+C 检查

  • REM 记录批处理文件或 CONFIG.SYS 中的注释。

  • PAUSE 停止批处理文件的处理并显示信息。

  • SETLOCAL 开始用批文件改变环境的本地化

  • ENDLOCAL 结束批文件中环境更改的本地化

  • EXIT 退出 CMD.EXE 程序(命令解释程序)


批处理常规命令


  • ASSOC 显示或修改文件扩展名关联

  • ATTRIB 显示或更改文件属性

  • BOOTCFG 设置 boot.ini 文件的属性以便控制启动加载

  • CACLS 显示或修改文件的访问控制列表(ACL)

  • CALL 从另一个批处理程序调用这一个

  • CD 显示当前目录的名称或将其更改

  • CHCP 显示或设置活动代码页数

  • CHDIR 显示当前目录的名称或将其更改

  • CHKDSK 检查磁盘并显示状态报告

  • CHKNTFS 显示或修改启动时间磁盘检查

  • CLS 清除屏幕

  • CMD 打开另一个 Windows 命令解释程序窗口

  • COLOR 设置默认控制台前景和背景颜色

  • COMP 比较两个或两套文件的内容。

  • COMPACT 显示或更改 NTFS 分区上文件的压缩。

  • CONVERT 将 FAT 卷转换成 NTFS,您不能转换当前驱动器

  • COPY 将至少一个文件复制到另一个位置

  • DATE 显示或设置日期

  • DEL 删除至少一个文件 == ERAS 删除一个或多个文件

  • DIR 显示一个目录中的文件和子目录

  • DISKCOMP 比较两个软盘的内容

  • DISKCOPY 将一个软盘的内容复制到另一个软盘

  • DISKPART 显示或配置磁盘分区属性

  • DOSKEY 编辑命令行、调用 Windows 命令并创建宏

  • DRIVERQUERY 显示当前设备驱动程序状态和属性

  • ECHO 显示消息,或将命令回显打开或关上

  • EVENTQUERY 显示指定准则的事件日志项目。 NO -- WIN7 无

  • FC 比较两个文件或两个文件集并显示它们之间的不同

  • FIND 在一个或多个文件中搜索一个文字字符串

  • FINDSTR 在多个文件中搜索字符串。

  • FORMAT 格式化磁盘,以便跟 Windows 使用

  • FSUTIL 显示或配置文件系统的属性

  • FTYPE 显示或修改用在文件扩展名关联的文件类型

  • GPRESULT 显示机器或用户的组策略信息。

  • GRAFTABL 启用 Windows 在图形模式显示扩展字符集。 WIN7 NO SECURITY!!!

  • HELP 提供 Windows 命令的帮助信息。

  • LABEL 创建、更改或删除磁盘的卷标。

  • MD 创建一个目录。

  • MKDIR 创建一个目录。

  • MODE 配置系统设备。

  • MORE 逐屏显示输出。

  • MOVE 将一个或多个文件从一个目录移动到另一个目录。

  • OPENFILES 显示远程用户为了文件共享而打开的文件。

  • PAGEFILECONFIG 显示或配置页面文件的属性。 win 7 no Command

  • PATH 为可执行文件显示或设置搜索路径= 就是等于 Enviroment 变量

  • POPD 还原由 PUSHD 保存的当前目录上一次的值。

  • PRINT 打印一个文本文件,打印机;

  • PROMPT 改变 Windows 命令提示

  • PUSHD 保存当前目录,然后对其进行更改

  • RD 删除目录 == RMDIR 删除目录

  • RECOVER 从损坏的磁盘中恢复可读取的信息。

  • REN 重新命名文件 = RENAME 重新命名文件

  • REPLACE 替换文件

  • SET 显示、设置或删除 Windows 环境变量

  • SC 显示或配置服务(后台处理)

  • SCHTASKS 安排命令和程序在一部计算机上按计划运行

  • SHUTDOWN 让机器在本地或远程正确关闭

  • SORT 将输入排序

  • SUBST 将驱动器号与路径关联

  • SYSTEMINFO 显示机器的具体的属性和配置。

  • TASKLIST 显示包括服务的所有当前运行的任务。

  • TASKKILL 终止正在运行的进程或应用程序。

  • TIME 显示或设置系统时间。

  • TREE 以图形显示启动器或路径的目录结构。

  • TYPE 显示文本文件的内容。

  • VER 显示 Windows 的版本。

  • VERIFY 告诉 Windows 验证文件是否正确写入磁盘。

  • VOL 显示磁盘卷标和序列号。

  • XCOPY 复制文件和目录树(包括属性)

  • WMIC 在交互命令外壳里显示 WMI 信息。


原文作者: WeiyiGeek

原文链接: https://mp.weixin.qq.com/s/71fzzyPhQyF53ulOQtI1Dg

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

发布于: 2 小时前阅读数: 7
用户头像

一个有梦想的人,追求全栈极客的人。 2020-12-23 加入

全栈学习修炼心得,专注分享网安、运维、编程、大数据、云原生、物联网、人工智能、书籍笔记、工作实践、人生职场感悟等文章。个人主页: 『 weiyigeek.top 』,同时还运营了一个技术公众号『全栈工程师修炼指南』。

评论

发布
暂无评论
1.从零开始学Windows批处理编程系列之基础介绍_编程_全栈工程师修炼指南_InfoQ写作社区