当前位置:   article > 正文

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

批处理 定义变量

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

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

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

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


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

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


文章目录:

2d1611c962a13db18a65fda27a24a8ac.png

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

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

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

1.变量的定义

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

示例演示:

  1. @echo off
  2. :: 变量(Variable)定义与调用
  3. set var1=123
  4. echo var1=%var1%
  5. set var2=456
  6. echo var2=%var2%
  7. :: 将变量进行调用并进行算数(加减乘除)运算
  8. set /a sum=%var1%+%var2%
  9. echo var1 + var2 = %sum%
  10. :: 删除定义的变量,在变量名后加上=则表示删除该变量
  11. set sum=
  12. echo %sum%
  13. pause

执行结果:

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

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

  1. # terminal 1
  2. setx name weiyigeek
  3. # terminal 2
  4. echo %name%

2.环境变量

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

系统自定义环境变量:

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

常规系统自定变量:

  1. ALLUSERSPROFILE=C:\ProgramData
  2. APPDATA=C:\Users\WeiyiGeek\AppData\Roaming
  3. ChocolateyInstall=C:\ProgramData\chocolatey
  4. ChocolateyLastPathUpdate=132182620227579881
  5. CommonProgramFiles=C:\Program Files\Common Files
  6. CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
  7. CommonProgramW6432=C:\Program Files\Common Files
  8. COMPUTERNAME=WEIYIGEEK
  9. ComSpec=C:\WINDOWS\system32\cmd.exe
  10. DriverData=C:\Windows\System32\Drivers\DriverData
  11. HOMEDRIVE=C:
  12. HOMEPATH=\Users\WeiyiGeek
  13. LOCALAPPDATA=C:\Users\WeiyiGeek\AppData\Local
  14. LOGONSERVER=\\WEIYIGEEK
  15. NUMBER_OF_PROCESSORS=4
  16. OneDrive=C:\Users\WeiyiGeek\OneDrive
  17. OS=Windows_NT
  18. Path=C:\Window;C:\Windows\system32;;C:\Users\WeiyiGeek\AppData\Local\Microsoft\WindowsApps;
  19. PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
  20. PROCESSOR_ARCHITECTURE=AMD64
  21. PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
  22. PROCESSOR_LEVEL=6
  23. PROCESSOR_REVISION=3c03
  24. ProgramData=C:\ProgramData
  25. ProgramFiles=C:\Program Files
  26. ProgramFiles(x86)=C:\Program Files (x86)
  27. ProgramW6432=C:\Program Files
  28. PROMPT=$P$G
  29. PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files\Intel\Wired Networking\
  30. PUBLIC=C:\Users\Public
  31. SESSIONNAME=Console
  32. SystemDrive=C:
  33. SystemRoot=C:\WINDOWS
  34. TEMP=C:\Users\WEIYIG~1\AppData\Local\Temp
  35. TMP=C:\Users\WEIYIG~1\AppData\Local\Temp
  36. USERDOMAIN=WEIYIGEEK
  37. USERDOMAIN_ROAMINGPROFILE=WEIYIGEEK
  38. USERNAME=WeiyiGeek
  39. USERPROFILE=C:\Users\WeiyiGeek
  40. VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
  41. windir=C:\WINDOWS

示例演示:

  1. @echo off
  2. :: 计算机信息输出
  3. echo 主机名称: %COMPUTERNAME%
  4. echo 主机域名: %USERDOMAIN%
  5. echo 主机域: %LOGONSERVER%
  6. echo 系统版本: %OS%
  7. echo 处理器数量: %NUMBER_OF_PROCESSORS%
  8. echo 处理器架构: %PROCESSOR_ARCHITECTURE%
  9. echo 处理器标识: %PROCESSOR_IDENTIFIER%
  10. echo 处理器等级: %PROCESSOR_LEVEL%
  11. echo 处理器修订: %PROCESSOR_REVISION%
  12. echo 用户名称: %USERNAME%
  13. echo 系统盘符: %HOMEDRIVE%
  14. pause

执行结果:

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

温馨提示:

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

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

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

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

  1. # 输出与设置PATH环境变量
  2. echo %PATH%
  3. PATH=%PATH%;%JAVA_HOME%\bin
  4. # 定义主机系统变量
  5. CLASSPATH=.;D:\Programs\java\jdk\lib\dt.jar;D:\Programs\java\jdk\lib\tools.jar;
  6. JAVA_HOME=D:\Programs\java\jdk
  7. JDK_HOME=D:\Programs\java\jdk
  8. MAVEN_HOME=E:\Development\apache-maven-3.6.3-bin
  9. PyCharm=D:\JetBrains\PyCharm\bin;
  10. TNS_ADMIN=F:\ChoromeDownload\instantclient_19_3
  11. NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

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

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

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

3.扩展变量

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

  1. @echo off
  2. :: 系统扩展变量一览
  3. echo 当前盘符:%~d0
  4. echo 当前盘符和路径:%~dp0
  5. echo 当前批处理全路径:%~f0
  6. echo 当前盘符和路径的短文件名格式:%~sdp0
  7. echo 当前CMD默认目录:%cd%
  8. echo 当前日期时间: %date% %time%
  9. echo 随机字符串: %RANDOM%
  10. echo 当前 ERRORLEVEL 数值: %ERRORLEVEL%
  11. echo 当前命令处理器扩展版本号: %CMDEXTVERSION%
  12. echo 当前调用命令处理器的原始命令行: %CMDCMDLINE%
  13. echo 当前计算机上的最高 NUMA 节点号:%HIGHESTNUMANODENUMBER%
  14. ::目录中有空格也可以加入""避免找不到路径
  15. echo 当前盘符:"%~d0"
  16. echo 当前盘符和路径:"%~dp0"
  17. echo 当前批处理全路径:"%~f0"
  18. echo 当前盘符和路径的短文件名格式:"%~sdp0"
  19. echo 当前CMD默认目录:"%cd%"
  20. pause

5f197d6f6640e73755eadd87a5b1dea5.png

综合示例:

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

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

4.交互式输入

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

示例演示:

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

执行结果:

  1. > .\9.interactive-input.bat
  2. 请输入账号:WeiyiGeek
  3. 请输入密码:Password
  4. /***************/
  5. 你输入的账号是: WeiyiGeek
  6. 你输入的密码是: 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 或 关注公众号 [全栈工程师修炼指南] 留言。

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/393750
推荐阅读
相关标签
  

闽ICP备14008679号