赞
踩
欢迎关注「全栈工程师修炼指南」
设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习!
专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享
“ 花开堪折直须折,莫待无花空折枝。 ”
作者<安全开发运维>答疑交流群,回复【学习交流群】即可加入
原文地址: 运维必学 | 变量定义调用-从零开始学Windows批处理(Batch)编程系列教程
文章目录:
本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。
描述: 同许多脚本语言一样,Bat批处理也支持变量的定义与调用,下面我们来看看具体实例。
描述: 在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%
描述: 在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终端进行执行验证。
描述: 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
综合示例:
- @echo off
- :: 在当前脚本目录下重定向创建文件:
- set redirect=%~dp0\redirect.txt
- echo "This a redirect line">>%redirect%
亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?
描述: 在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
如果此篇文章对你有帮助,请你将它分享给更多的人!
学习书籍推荐 往期发布文章
回复【0008】获取【Ubuntu22.04安装与加固脚本】
回复【10001】获取【WinServer安全加固脚本】
回复【10002】获取【KylinOS银河麒麟安全加固脚本】
回复【0011】获取【k8S二进制安装部署教程】
回复【0014】获取【Nginx学习之路汇总】
回复【0015】获取【Jenkins学习之路汇总】
回复【10005】获取【adb工具刷抖音赚米】
热文推荐
欢迎长按(扫描)二维码 ,获取更多渠道哟!
欢迎关注 【全栈工程师修炼指南】(^U^)ノ~YO
添加作者微信【weiyigeeker】,拉你一起学习交流吧!
关注回复【学习交流群】即可加入【安全开发运维沟通交流群】
温馨提示: 由于作者水平有限,本章错漏缺点在所难免,希望读者批评指正,若有问题或建议请在文章末尾留下您宝贵的经验知识,或联系邮箱地址 master@weiyigeek.top 或 关注公众号 [全栈工程师修炼指南] 留言。
朋友点个【赞 + 在看】吧!
点击【"阅读原文"】获取更多有趣的知识!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。