【bat/cmd】脚本开发
2018-12-05 17:55 Ivan的一亩三分地 阅读(445) 评论(0) 编辑 收藏 举报0. 开篇
bat/cmd 均是window操作系统下,两者都是通过文本方式编辑,创建以及查看。均是命令的集合。bat与cmd有什么区别呢 ?
1) cmd文件允许使用的命令比bat多,但是只有在windows2000以上的系统中才能运行
2) bat 文件允许使用的命令比cmd少,但是没有系统上的限制
3) cmd文件 “Windows NT命令脚本”,bat 文件“MS DOS批处理文件”
4) 文件扩展名不同,cmd文件是".cmd",bat文件扩展名是“.bat”
批处理脚本的一些功能
- 可以读取用户的输入,以便进一步处理。
- 有控制结构:
for
,if
,while
和switch
更好的自动化和脚本。 - 支持高级功能,如函数和数组。
- 支持正则表达式。
- 可以包含其他编程代码,如Perl。
批处理脚本的一些用途
- 为不同的目的设置服务器。
- 自动管理活动和日志,如删除不需要的文件或日志文件。
- 自动将应用程序从一个环境部署到另一个环境。
- 立即在各种机器上安装程序。
1. 基础批处理命令
命令1:echo
命令2:md/mkdir
获取当前路径
@echo off
echo current disk: %~d0
echo current disk and path: %~dp0
echo current file: %~f0
echo short current directry path: %~sdp0
echo %cd%
pause
判断变量是否为空
很多时候,我们需要检查某个变量的值是否为空,以便做后续处理。
对于这个问题,很多人会毫不犹豫地选择 if "%str%"=="" …… 的句式,在早期的批处理中,还可以看到这样的语句:if [%str%]==[],有人把这两种写法称为“防空字符”。
可是,这样做真的能在各种复杂的情况下判断某个变量的值是否为空吗?
答案是否定的。
先来看 if [%str%]==[],当%str%为空值的时候,它无疑能成功地捕获到这一情况,但是,如果%str%中含有特殊字符,比如>、&之类,这条语句就会报错。
为了兼容这几个特殊字符,人们绞尽脑汁,想到了 if "%str%"=="" 语句,于是,>、&、|之类的特殊字符也能顺利通过验证了,这是防空字符的一大进步。
但是,这条语句也不是完美的,因为有一个特殊字符它完全没办法处理!
这个特殊字符是什么呢?
它就是双引号"本身!
我们执行一下如下代码:
- @echo off
- set str="
- if "%str%"=="" (echo yes) else echo no
- pause
CMD.EXE报错了:命令语法错误。
原来,上面这条if语句执行的是 if """=="" ……,引号起到分组字符串的作用,而引号对是就近匹配的:第一个引号和第二个引号配成一对,第三个引号和第四个引号配成一对,第五个引号和第六个引号配成一对……,这条if语句最终的执行的是 if "==……,但是引号始终要作为分组字符来使用的,而单个的引号没有找到下一个可匹配的引号,所以就出现了语法错误。
当把 %str% 的值改为两个引号的时候,上面这段代码的执行结果居然显示为no,想想这是为什么。
if "%str%"==""……能兼容大部分特殊字符,但是偏偏不能兼容引号本身,那么,判断某个变量的值是否为空,是不是就没有更好的办法了呢?
答案是肯定的,那就是:用 if defined str 语句来判断变量值是否为空。
请执行以下代码:
- @echo off
- :Main
- cls
- set str=
- set /p "str=请输入任意字符,或直接回车:"
- if defined str (
- echo 变量 str 的值不为空
- ) else echo 变量 str 为空值
- pause
- goto Main
参考链接:
https://my.oschina.net/superkangning/blog/528881
https://www.yiibai.com/batch_script/
https://www.zybuluo.com/yangfch3/note/338252
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架