没有合适的资源?快使用搜索试试~ 我知道了~
首页CMD高级批处理技巧与FOR命令详解
CMD高级批处理技巧与FOR命令详解
需积分: 9 14 下载量 161 浏览量
更新于2024-07-25
收藏 1.24MB PDF 举报
本资源是一份详尽的CMD命令行高级教程,涵盖了批处理的基础知识和FOR命令的深入讲解。教程从第一章"批处理基础"开始,介绍了常用的内部命令,如REM用于注释、ECHO控制输出、PAUSE暂停执行、ERRORLEVEL处理错误级别、TITLE设置窗口标题、COLOR设置文本颜色以及管理设备模式等。章节中还特别强调了GOTO和:标签、FIND搜索功能、START启动程序、以及变量管理和控制,如SETLOCAL/ENABLEDELAYEDEXPANSION用于环境变量延迟扩展。 第二部分深入探讨了特殊符号在批处理中的运用,包括命令行回显屏蔽符、批处理变量引用符、重定向符(>、>>、<、>&、<&)、命令管道符(|)、转义字符(^)、命令组合符(&、&&、||)以及字符串界定符。此外,教程还特别关注了FOR命令的复杂用法,包括基本格式、递归遍历目录、迭代数值范围、文件解析等功能,以及FOR命令中涉及的多个变量扩展选项,如删除引号的~I、完整路径名的%~fI、驱动器号的%~dI等,直到文件属性、日期时间、大小等信息的获取。 此教程旨在帮助用户掌握CMD命令行的高级技巧,不仅限于基础操作,而是深入理解并灵活运用这些命令,提升自动化脚本编写和系统管理能力。无论是对于Windows系统管理员、程序员还是对命令行有深入需求的用户,这都是一份极其实用的学习资料。由于部分内容未在提供的片段中展示,读者可以参考后续的9、10、11楼内容,以获得完整的教程细节。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/6216799/bgc.jpg)
批处理读取命令时是按行读取的(另外例如 for 命令等,其后用一对圆括号闭合的所有语句也当作一行),
在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例 1,批
处理在运行到这句“set a=5 & echo %a%”之前,先把这一句整句读取并做了预处理——对变量 a 赋了值,
那么%a%当然就是 4 了!(没有为什么,批处理就是这样做的。)
而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之
后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的
赋值。
那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:
例 2:
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
结果:5
解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并
且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
分析一下例 2,首先“setlocal enabledelayedexpansion”开启变量延迟,然后“set a=4”先给变量 a 赋值为
4,“set a=5 & echo !a!”这句是给变量 a 赋值为 5 并输出(由于启动了变量延迟,所以批处理能够感知到
动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时 a 的值就是 5 了)。
再举一个例子巩固一下。
例 3:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
echo !a!
)
pause
结果:
1
2
3
4
5
解说:本例开启了变量延迟并用“!!”将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现
什
么结果呢?结果是这样的:
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
即没有感知到 for 语句中的动态变化。
提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也
可以加以利用,看例子。
例:交换两个变量的值,且不用中间变量
@echo off
::目的:交换两个变量的值,但是不使用临时变量
::Code by JM 2007-1-24 [email=CMD@XP]CMD@XP[/email]
![](https://csdnimg.cn/release/download_crawler_static/6216799/bgd.jpg)
::出处:[url=http://www.cn-dos.net/forum/viewthread.php?tid=27078]http://www.cn-
dos.net/forum/viewthread.php?tid=27078[/url]
set var1=abc
set var2=123
echo 交换前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交换后: var1=%var1% var2=%var2%
pause
17、ATTRIB 显示或更改文件属性
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]
+ 设置属性。
- 清除属性。
R 只读文件属性。
A 存档文件属性。
S 系统文件属性。
H 隐藏文件属性。
[drive:][path][filename]
指定要处理的文件属性。
/S 处理当前文件夹及其子文件夹中的匹配文件。
/D 也处理文件夹。
例:
md autorun
attrib +a +s +h autorun
上面的命令将建立文件夹 autorun,然后将其设为存档、系统、隐藏属性
第二节 常用特殊符号
1、@ 命令行回显屏蔽符
2、% 批处理变量引导符
3、> 重定向符
4、>> 重定向符
5、<、>&、<& 重定向符
6、| 命令管道符
7、^ 转义字符
8、& 组合命令
9、&& 组合命令
10、|| 组合命令
11、"" 字符串界定符
12、, 逗号
13、; 分号
14、() 括号
15、! 感叹号
16、批处理中可能会见到的其它特殊标记符: (略)
CR(0D) 命令行结束符
Escape(1B) ANSI 转义字符引导符
Space(20) 常用的参数界定符
![](https://csdnimg.cn/release/download_crawler_static/6216799/bge.jpg)
Tab(09) ; = 不常用的参数界定符
+ COPY 命令文件连接符
* ? 文件通配符
/ 参数开关引导符
: 批处理标签引导符
废话少说,开讲了
1、@ 命令行回显屏蔽符
这个字符在批处理中的意思是关闭当前行的回显。我们从前几课知道
ECHO OFF 可以关闭掉整个批处理命令的回显,但不能关掉 ECHO OFF 这个命令,现在我们在 ECHO OFF 这个
命令前加个@,就可以达到所有命令均不回显的要求
2、% 批处理变量引导符
这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将
详细介绍)。
引用变量用%var%,调用程序外部参数用%1 至%9 等等
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*为命令行传递给批处理的参数
%0 批处理文件本身,包括完整的路径和扩展名
%1 第一个参数
%9 第九个参数
%* 从第一个参数开始的所有参数
参数%0 具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等
等。
例:最简单的复制文件自身的方法
copy %0 d:\wind.bat
小技巧:添加行内注释
%注释内容%(可以用作行内注释,不能出现重定向符号和管道符号)
为什么这样呢?此时“注释内容”其实被当作变量,其值是空的,故只起注释作用,不过这种用法容易出
现语法错误,一般不用。
3、> 重定向符
输出重定向命令
这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也
可以是默认的系统控制台)
在 NT 系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&&,||
和语句块的制约限制。
比如:
使用命令:echo hello >1.txt 将建立文件 1.txt,内容为”hello “(注意行尾有一空格)
使用命令:echo hello>1.txt 将建立文件 1.txt,内容为”hello“(注意行尾没有空格)
4、>> 重定向符
输出重定向命令
这个符号的作用和>有点类似,但他们的区别是>>是传递并在文件的末尾追加,而>是覆盖
![](https://csdnimg.cn/release/download_crawler_static/6216799/bgf.jpg)
用法同上
同样拿 1.txt 做例子
使用命令:
echo hello > 1.txt
echo world >>1.txt
这时候 1.txt 内容如下:
hello
world
5、<、>&、<& 重定向符
这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就 ok 了,当然如果想仔细研究的话,可
以自己查一下资料。(本人已查过,网上也查不到相关资料)
<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
这样就可以不等待输入直接修改当前日期
>&,将一个句柄的输出写入到另一个句柄的输入中。
<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。
常用句柄:0、1、2,未定义句柄:3—9
1>nul 表示禁止输出正确的信息
2>nul 表示禁止输出错误信息。
其中的 1 与 2 都是代表某个数据流输入输出的地址(NT CMD 称之为句柄,MSDOS 称之为设备)。
句柄 0:标准输入 stdin,键盘输入
句柄 1:标准输出 stdout,输出到命令提示符窗口(console,代码为 CON)
句柄 2:标准错误 stderr,输出到命令提示符窗口(console,代码为 CON)
其中的 stdin 可被<重定向,stdout 可被>、>>重定向。
我们已经知道读取文本中的内容可以用 for 命令,但如果只需要读取第一行用 for 命令就有点麻烦。简单的
办法如下:
@echo off
set /p str=<%0
echo %str%
pause
运行显示批处理文件自身的第一行:@echo off
6、| 命令管道符
格式:第一条命令 | 第二条命令 [| 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在 unix 中这种方式很常见。
例如:
dir c:\|find "txt"
以上命令是:查找 C:\所有,并发现 TXT 字符串。
FIND 的功能请用 FIND /? 自行查看
在不使 format 的自动格式化参数时,我是这样来自动格式化 A 盘的
echo y|format a: /s /q /v:system
用过 format 的都知道,再格盘时要输入 y 来确认是否格盘,这个命令前加上 echo y 并用|字符来将 echo y
的结果传给 format 命令
从而达到自动输入 y 的目的
剩余72页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
lc_liuyang
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- AirKiss技术详解:无线传递信息与智能家居连接
- Hibernate主键生成策略详解
- 操作系统实验:位示图法管理磁盘空闲空间
- JSON详解:数据交换的主流格式
- Win7安装Ubuntu双系统详细指南
- FPGA内部结构与工作原理探索
- 信用评分模型解析:WOE、IV与ROC
- 使用LVS+Keepalived构建高可用负载均衡集群
- 微信小程序驱动餐饮与服装业创新转型:便捷管理与低成本优势
- 机器学习入门指南:从基础到进阶
- 解决Win7 IIS配置错误500.22与0x80070032
- SQL-DFS:优化HDFS小文件存储的解决方案
- Hadoop、Hbase、Spark环境部署与主机配置详解
- Kisso:加密会话Cookie实现的单点登录SSO
- OpenCV读取与拼接多幅图像教程
- QT实战:轻松生成与解析JSON数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)