运维必学 | 变量定义调用-从零开始学Windows批处理(Batch)编程系列教程

欢迎关注「全栈工程师修炼指南

设为星标⭐每天带你 基础入门 到 进阶实践 再到 放弃学习

专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享

  花开堪折直须折,莫待无花空折枝 


作者<安全开发运维>答疑交流群,回复【学习交流群】即可加入

原文地址: 运维必学 | 变量定义调用-从零开始学Windows批处理(Batch)编程系列教程


文章目录:

2d1611c962a13db18a65fda27a24a8ac.png

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

0x00 批处理(Batch)变量定义调用

描述: 同许多脚本语言一样,Bat批处理也支持变量的定义与调用,下面我们来看看具体实例。

1.变量的定义

描述: 在windows批处理中我们通常会使用set命令来定义或者删除变量,并使用%变量名%来引用变量(注意前后闭合)。

示例演示:

@echo off
:: 变量(Variable)定义与调用
set var1=123
echo var1=%var1%

set var2=456
echo var2=%var2%

:: 将变量进行调用并进行算数(加减乘除)运算
set /a sum=%var1%+%var2%
echo var1 + var2 = %sum%

:: 删除定义的变量,在变量名后加上=则表示删除该变量
set sum=
echo %sum%
pause

执行结果:

var1=123
var2=456
var1 + var2 = 579
ECHO 处于关闭状态。
请按任意键继续. . .

补充知识: 除了使用 set 命令 定义变量,还可以使用 setx 命令 定义变量,其两者的不同之处在于,前者临时生效当终端关闭时则销毁,而后者则是永久生效但需要在新打开的终端中输出。

# terminal 1
setx name weiyigeek

# terminal 2
echo %name%

2.环境变量

描述: 在Windows找中批处理的变量可以分为两类,由系统定义的系统变量和由用户根据需要自定义的用户变量,我们可直接在终端中执行set即可查看系统变量与用户自定义变量!

系统自定义环境变量:

COMPUTERNAME : 计算机名
USERNAME  : 当前用户名,即所登陆的账户名
HOMEDRIVE : 系统分区盘符,一般都是C盘,故而HomeDrive=C:
HOMEPATH  : 用户的家目录相当于Linux中的 /home/user/,在windows中输出 \Users\WeiyiGeek
PROMPT    : 自定义个性化设置cmd提示符的必备武器,类似于Linux中的PS1变量!(强大!!!)
OS : 系统版本
TEMP : 临时数据存放目录
TMP : 临时数据存目录
ComSpec : 命令行 cmd.exe 完整路径名
SystemDrive : 包含系统根目录的分区,其实就是HomeDrive了
SystemRoot  : 系统根目录路径,一般都是 C:\WINDOWS
WinDir      : 操作系统路径,其实就是 SystemRoot
Path        : 环境变量可执行文件默认搜索路径
ProgramFiles : 就是系统的Program Files的路径啦,一般都是C:\Program Files,这就是安装软件时默认的安装路径了

常规系统自定变量:

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\WeiyiGeek\AppData\Roaming
ChocolateyInstall=C:\ProgramData\chocolatey
ChocolateyLastPathUpdate=132182620227579881
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=WEIYIGEEK
ComSpec=C:\WINDOWS\system32\cmd.exe
DriverData=C:\Windows\System32\Drivers\DriverData
HOMEDRIVE=C:
HOMEPATH=\Users\WeiyiGeek
LOCALAPPDATA=C:\Users\WeiyiGeek\AppData\Local
LOGONSERVER=\\WEIYIGEEK
NUMBER_OF_PROCESSORS=4
OneDrive=C:\Users\WeiyiGeek\OneDrive
OS=Windows_NT
Path=C:\Window;C:\Windows\system32;;C:\Users\WeiyiGeek\AppData\Local\Microsoft\WindowsApps;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=3c03
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files\Intel\Wired Networking\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\Users\WEIYIG~1\AppData\Local\Temp
TMP=C:\Users\WEIYIG~1\AppData\Local\Temp
USERDOMAIN=WEIYIGEEK
USERDOMAIN_ROAMINGPROFILE=WEIYIGEEK
USERNAME=WeiyiGeek
USERPROFILE=C:\Users\WeiyiGeek
VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
windir=C:\WINDOWS

示例演示:

@echo off
:: 计算机信息输出
echo 主机名称: %COMPUTERNAME%
echo 主机域名: %USERDOMAIN%
echo 主机域: %LOGONSERVER%
echo 系统版本: %OS%
echo 处理器数量: %NUMBER_OF_PROCESSORS%
echo 处理器架构: %PROCESSOR_ARCHITECTURE%
echo 处理器标识: %PROCESSOR_IDENTIFIER%
echo 处理器等级: %PROCESSOR_LEVEL%
echo 处理器修订: %PROCESSOR_REVISION%
echo 用户名称: %USERNAME%
echo 系统盘符: %HOMEDRIVE%
pause

执行结果:

.\7.system-env-variable.bat
主机名称: WEIYIGEEK
主机域名: WEIYIGEEK
系统版本: Windows_NT
处理器数量: 4
处理器架构: AMD64
处理器标识: Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
处理器等级: 6
处理器修订: 3c03
用户名称: WeiyiGeek
系统盘符: C:
Press any key to continue . . .

温馨提示:

  • Temp、Tmp 变量 : 文件、程序等可使用的临时目录,默认是C:\WINDOWS\Temp或Tmp。几乎所有的程序在运行时都会在这个目录里面“临时”写入文件。一般情况下,程序写入的临时文件都应该被该程序删除,可惜的是,大部分的程序都很健忘,导致这个文件夹占据的空间越来越大,自然也就使我们的系统增肥喽。所以,我们要把它修改到其他分区,并且时时的清理里面的临时文件

  • UserProfile 变量 : 当前用户的配置目录,一般都是C:\Documents and Settings%UserName%。默认情况下,我们的桌面就是这个目录下面的“桌面”文件夹;我的文档就是这个目录下面的“My Documents”文件夹

用户自定义环境变量
描述: 编写批处理程序时,用户根据需要自己定义的变量称之为用户变量,用户变量类似于C语言里面的变量,仅仅在定义该变量的程序中有效。

例如,下面就是用户之定义的变量,以及最常操作的PATH环境变量。

# 输出与设置PATH环境变量
echo %PATH%
PATH=%PATH%;%JAVA_HOME%\bin  

# 定义主机系统变量
CLASSPATH=.;D:\Programs\java\jdk\lib\dt.jar;D:\Programs\java\jdk\lib\tools.jar;
JAVA_HOME=D:\Programs\java\jdk
JDK_HOME=D:\Programs\java\jdk
MAVEN_HOME=E:\Development\apache-maven-3.6.3-bin
PyCharm=D:\JetBrains\PyCharm\bin;
TNS_ADMIN=F:\ChoromeDownload\instantclient_19_3
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

如何设置永久有效的环境变量? 当然是采用前面的主人公 setx 命令。

@echo off
# 运行 jdk-8u181-windows64.exe /q 即可进行静默安装即可(默认路径) 
jdk-8u181-windows64.exe /q
# 设置永久变量
setx /M JAVA_HOME "C:\Program Files\Java\jdk1.8.0_181"
setx /M JAVA_HOME "C:\Program Files\Java\jdk1.8.0_221"
# 成功: 指定的值已得到保存。
setx /M PATH "%PATH%;%JAVA_HOME%\bin;%JAVA_HOME%\jre;"
# 成功: 指定的值已得到保存。

温馨提示: 安装设置完毕后需重新打开一个cmd.exe终端进行执行验证。

3.扩展变量

描述: Windows 批处理中有许多扩展变量,此处先介绍一部分常规扩展变量,在后续的学习中作者会持续扩充。
简单示例

@echo off
:: 系统扩展变量一览
echo 当前盘符:%~d0
echo 当前盘符和路径:%~dp0
echo 当前批处理全路径:%~f0
echo 当前盘符和路径的短文件名格式:%~sdp0
echo 当前CMD默认目录:%cd%
echo 当前日期时间: %date% %time% 
echo 随机字符串: %RANDOM% 
echo 当前 ERRORLEVEL 数值: %ERRORLEVEL%
echo 当前命令处理器扩展版本号: %CMDEXTVERSION% 
echo 当前调用命令处理器的原始命令行: %CMDCMDLINE%
echo 当前计算机上的最高 NUMA 节点号:%HIGHESTNUMANODENUMBER%

::目录中有空格也可以加入""避免找不到路径
echo 当前盘符:"%~d0"
echo 当前盘符和路径:"%~dp0"
echo 当前批处理全路径:"%~f0"
echo 当前盘符和路径的短文件名格式:"%~sdp0"
echo 当前CMD默认目录:"%cd%"
pause

5f197d6f6640e73755eadd87a5b1dea5.png

综合示例:

@echo off
:: 在当前脚本目录下重定向创建文件:
set redirect=%~dp0\redirect.txt
echo "This a redirect line">>%redirect%

亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?

4.交互式输入

描述: 在windows dos中也有类似于Linux系统的 read 读取变量的命令,那就是 set 命令,在前面我们学习了其定义变量,此处我们学习它另外一个特性,获取用户交互式输入。

示例演示:

@echo off
:: 批处理程序交互式测试 (Batch Program interactive Test)
set /p a="请输入账号:"
set /p b="请输入密码:"
echo /***************/
echo 你输入的账号是: %a%
echo 你输入的密码是: %b%
pause

执行结果:

> .\9.interactive-input.bat
请输入账号:WeiyiGeek
请输入密码:Password
/***************/
你输入的账号是: WeiyiGeek
你输入的密码是: Password

温馨提示:输入时请注意文件编码格式以及终端是否为GBK,否则有可能输出乱码。

本文至此完毕,更多技术文章,尽情等待下篇好文!

原文地址: https://blog.weiyigeek.top/2023/6-28-754.html

如果此篇文章对你有帮助,请你将它分享给更多的人! 

00cf1bcab27a9bb85fbd5f8da5e486e1.gif

d683d0a259126c0de6f4725dfd92a3b3.png 学习书籍推荐 往期发布文章 a54e9edd8b0985827ce7fe15aab7eb28.png

回复【0008】获取【Ubuntu22.04安装与加固脚本】

回复【10001】获取【WinServer安全加固脚本】

回复【10002】获取【KylinOS银河麒麟安全加固脚本】

回复【0011】获取【k8S二进制安装部署教程】

回复【0014】获取【Nginx学习之路汇总】

回复【0015】获取【Jenkins学习之路汇总】

回复【10005】获取【adb工具刷抖音赚米】

 热文推荐  

欢迎长按(扫描)二维码 取更多渠道哟!

欢迎关注 【全栈工程师修炼指南】(^U^)ノ~YO

添加作者微信【weiyigeeker】,拉你一起学习交流吧!

关注回复【学习交流群】即可加入【安全开发运维沟通交流群

温馨提示: 由于作者水平有限,本章错漏缺点在所难免,希望读者批评指正,若有问题或建议请在文章末尾留下您宝贵的经验知识,或联系邮箱地址 master@weiyigeek.top 或 关注公众号 [全栈工程师修炼指南] 留言。

朋友点个【赞 + 在看】吧!

点击【"阅读原文"】获取更多有趣的知识!   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值