@
\\隐藏命令回显
~
\\for
表示使用增强
变量扩展;
set
表示使用扩展环境变量指定位置
字符串;
set/a
表示按位取反
%
\\使用两%包含
字符串表示引用环境变量
比
%time%
扩展
当前
系统时间;
单%紧跟0-9
数字表示引用命令行参数;
用于for表示引用循环变量;
连续两
%表示执行时脱
%
^
\\取消转义字符即
所有转义字符
转义作用关闭
比
要
屏幕显示
些特殊
字符,比
> >> | ^等时,
其前面加
^符号来显示
^
面
字符了,^^
显示
^,^|
显示
|字符了;
set/a
按位异;
findstr/r
[]
表示
匹配指定
字符集
&
\\命令连接字符比
我要
行文本上同时执行两
命令,
用&命令连接
两
命令;
set/a
按位与
*
\\代表任意任意字符,
我们通常所说
"通配符";比
想
c盘
根目录查找c盘根目录里所有
文本文件(.txt),
输入命令"dir c:\*.txt";
set/a
乘法
比
"set/a x=4*2",得
结
8;
findstr/r
表示
前
字符多次匹配
()
\\命令包含或者具有优先权
界定符吧,比
for命令要用
(),我们还
if,echo等命令
见
身影;
-
\\范围表示符,比日期
查找,for命令里
tokens操作
用
字符;
findstr/r
连接两
字符表示匹配范围;
-跟某些命令
/
表示取反向
开关
+
\\主要copy命令里面会用
,表示
多
文件合并
文件,
要用
+字符了;
set/a
加法
|
\\管道符上
命令
输出,作
下
命令
输入."dir /a/b | more"
逐屏
显示dir命令所输出
信息;
set/a
按位或;
帮助文档
表示其前
两
开关、选项或参数
二选
:
\\标签定位符,接受goto命令所指向
标签
比
批处理文件里面定义了
":begin"标签,用"goto begin"命令
转
":begin"变迁
面来执行批处理命令了
" "
\\界定符,表示带有空格
路径时常要用""来
路径括起来,
些命令里面也需要" "符号;
for/f
表示
们包含
内容当作字符串分析;
for/f "usebackq"表示
们包含
内容当作文件路径并分析其文件
内容;
其
情况下表示其
内容
完整
字符串
其
>、>>、<、&、|、空格等
再转义
/
\\表示其字符(串)
命令
功能开关(选项)
比
"dir /s/b/a-d"表示"dir"命令指定
同
参数;
set/a
表示除法
<
\\命令重定向符,其前面
命令
输出结
重新定向
其
面
设备
去
面
设备
内容被覆盖
比
用"dir > lxmxn.txt"
"dir"命令
结
输出
"lxmxn.txt"
文本文件
去;
findstr/r
表示匹配单词
右边界
需要配合转义字符\使用
>>
\\命令重定向符其前面
命令
输出结
重新定向
其
面
设备
去
面设备
内容没有被覆盖
<
\\其
面
文件
内容作
其前面命令
输入
findstr/r
表示匹配单词
左边界
需要配合转义字符\使用
=
\\赋值符号,用于变量赋值
比
"set a=windows"
意思意思
"windows"
字符串赋给变量"a";
set/a
表示算术运算,比
"set /a x=5-6*5"
\
\\"\"符号
有
情况下,代表
当前路径
根目录.比
当前目录
c:\windows\system32下,
"dir \"
,
相当与"dir c:\"
findstr/r
表示正则转义字符
''
for/f
表示
们包含
内容当作命令行执行并分析其输出;
for/f "usebackq"
表示
们包含
字符串当作字符串分析
.
\\
路径
\
紧跟或者单独出现时:
.表示当前目录;
两.表示上
级目录;
路径
文件名
出现时:
.表示主文件名与扩展文件名
分隔
&&
\\连接两命令,当&&前
命令成功时,才执行&&
命令;
||
\\连接两命令,当||前
命令失败时,才执行||
命令
$
\\findstr命令里面表示
行
结束
``
for/f
表示
们所包含
内容当作命令行执行并分析
输出
[]
帮助文档表示其
开关、选项或参数
选
;
findstr/r
表示按其
指定
字符集匹配
?
\\findstr/r
表示
此位置匹配
任意字符;
?路径
表示
此位置通配任意
字符;
紧跟/
表示获取命令
帮助文档
!
\\当启用变量延迟时,使用!!变量名扩起来表示对变量值
引用;
set /a
表示逻辑非
比
set /a a=!0,
时a
表示逻辑1
其
资料: 1、%
ESCAPE字符
通常
之译
转义字符
也有更形象
译名脱逸字符、逃逸字符等
也
说%
仅仅
与其相关
特定字符串转义并替换
特定字符串
而且自身也会被
脱逸
而且类似于C语言
转义字符"\"
双%会转义并脱逸
单%
四%则脱
双%
2、for本身特殊
命令
类似于
特化
命令解释器
因
功能实现需要执行多条语句
因此
必须也具有对命令行(特指do
命令行)分析处理
功能
而command/cmd实现for时自
会借用自身原有
命令行分析模块
因此for具有二级转义
特性
for
do
语句被分两级分析和解释
第
级
command/cmd读入并解释for命令行时
第二级
for读入并解释do命令时
通常会对同
命令行
进行多次解释
我们
注意
do
使用命令行参数变量和环境变量时
需要双%
因
些变量
经过第
级转义
被替换成特定
变
字符串常量
参与for循环
所有执行过程;而替代变量则要求
执行(do
子命令行
)过程
断
动态变化
而
变化自
仍需要通过脱逸字符来实现
因此使用双%
成了必
选择
另外还需要注意
命令行
使用for时
需要双%
源于命令解释器对命令行与批处理
处理方式
同
早期
DOS版本
%
命令行
被视
转义字符
所
会被转义和脱逸
所
当时无法
命令行直接引用环境变量
而使用for时
只需要
%供for进行转义和脱逸
够了
命令解释器版本
加入了命令行转义
支持(主要
环境变量
支持)
命令行for使用单%
传统仍
保留了下来
而 cmd变量延迟替换
属于特殊
情况
违背
上
转义原则
只
for
环境变量
再
常量了
rmdir /S /Q %mhnet% 2>NUL 1>NUL 做简单解释
句代码
大意
指
%mhnet% 指定
目录删除
/s 代表删除其
子目录
/q 表示删除目录树时
提示确认
1>nul 表示
正确删除目录树
信息禁止输出
2>nul 表示
删除过程
错误信息禁止输出
其1与2都
代表某
数据流输入输出
地址(NT CMD 称之
句柄
MSDOS称之
设备)
下表(引自WinXP帮助文档
使用命令重定向操作符 (Redirection Operators
节))
列出
用
句柄
句柄 句柄数字代号 说明
STDIN 0 键盘输入
STDOUT 1 输出命令提示符窗口
STDERR 2 错误输出命令提示符窗口
UNDEFINED 3-9 些句柄由应用程序和各
具体工具单独定义
0 键盘输入
1 输出命令提示符窗口
2 错误输出命令提示符窗口
3-9 些句柄由应用程序和各
具体工具单独定义
2 > nul 表示程序出错信息也
显示
call attrib -r -h c:\autoexec.bat >nul
句其实
:
call attrib -r -h c:\autoexec.bat 1 > nul
些1
2
0等等都
句柄
说白了
代号
只要知道1
代表输出信息
2
代表出错信息
0
代表键盘输入
行了
有
明白
多看看帮助与支持
命令行对重定向符号出现位置
做过多限定
只要重定向符号
紧随
字符设备
即
故
下语句等效:
echo Hello World> hello.txt
echo Hello> Hello.txt World
echo> Hello.txt Hello World
> hello.txt echo Hello World
NT系列命令行
重定向
作用范围由整
命令行转变
单
命令语句
受
了命令分隔符&,&&,||和语句块
制约限制
echo Message1> msg1.txt & echo Message2> msg2.txt
if "%target%"=="" (echo message to screen ) else (echo message to file> %target%)
综上所述>nul 意
此句命令所产生
标准输出请求重新定向
空设备
而因
此设备
缄默特性
即相当于
此语句
输出信息屏蔽(并非隐藏);而 2>nul 则
程序执行错误时
标准错误信息输出请求重定向
屏蔽
们联合使用
即
此语句所
能产生
所有输出信息屏蔽
重定向
MSDOS起
存
命令行特性
负责
指定命令或语句所产生
输入输出请求由缺省
控制台
转交给其
设备
来完成
启动标志
重定向符号
(包括
>,>>,<
三
其各自意义见[1])出现
句
般
命令行程序输入输出请求都通过内部定义三
端口
(
NT下称
句柄
DOS下未定义)来完成
分别
标准输入stdin、标准输出stdout、标准错误stderr
们通常指向
设备
控制台(console
代码
CON)
其
stdin指向控制台
键盘
stdout/stderr指向控制台
监视器
因此
控制台通常即指键盘与监视器
联合体
早期大型机
终端机上所体现出来
概念
其
stdin
被<重定向
stdout
被>、>>重定向
而stderr
DOS下
直接重定向
只有通过ctty或其
命令
系统控制权转交给其
设备
方式
来间接完成
设备
指
控制PC硬件或端口
设备驱动程序或端口代码
通常由系统底层或硬件驱动程序实现和支持
比
IO.SYS实现
控制台CON、系统时钟CLOCK$、未知设备CONFIG$、第
串口AUX、第
并口PRN、所有串口COM1~COM4、所有并口LPT1~LPT3、
用盘符A:-X:
及上文提
空设备NUL
还有许多其
设备
比
HIMEM.SYS实现
XMSXXXX0
EMM386.EXE实现
EMMXXXX0
IFSHLP.SYS实现
IFS$HLP$等
些设备
处理输入输出信息
少
只有CON、NUL
及连接有输入输出硬件(打印机、MODEM等)
串口或并口设备
们被称
字符设备
而磁盘文件也作
种特殊
字符设备列选其
大大扩充了重定向
自由度与实用性
致
多人也
重定向称
文件重定向
空设备NUL特殊
设备
因
没有
控制
PC硬件或端口
而只
虚构
设备或端口
仅存
于软件层面
正因
此
接受所有重定向
输入输出请求而
给出任何回应(
NT下
会给出任何输入信息而结束输入请求
DOS下则反复填充127
字节0
终止响应)
种特性使
像天文学上
能吞噬
切物质和信息
黑洞
也
类似哲学上能颠转阴阳无
生有
玄玄之道
之所
存
因
我们需要
默默无闻地无条件吸纳各种冗余输出信息或输入请求
回收站
正
黑洞
像
巨大
宇宙垃圾场
样
CMD没有神经错乱set处理
整数太大了
set使用双字节存储整数
有32位
存贮范围限制
也
说
处理范围
2^-31~2^31-1
磁盘空间超过了
范围溢出了
对此我没有太好解决办法
只有舍弃
三位
除
1049
近似算法
for /f "tokens=3" %%a in ('dir /-c c:\^|find "用字节"') do set freesize=%%a
set /a freesize=%freesize:~0,-3%/1049>nul
echo Freesize:%freesize%
> 创建文件
>> 追加文件
面
@ 前缀字符.表示执行时本行cmd里面
显示,
使用 echo off关闭显示
^ 对特殊符号( > < &)前导字符. 第
只
显示aaa 第二
输出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命令
(echo aa & echo bb)
, 和空格样
缺省分隔符号.
; 注释,表示面
注释
: 标号作用
│ 管道操作
; 符号当命令相同时候
同
目标用;隔离开来
执行效
变
执行过程
发生错误则只返回错误报告
程序还
会继续执行
首先, @ 命令, 而
DOS 批处理
特殊标记符, 仅用于屏蔽命令行回显. 下面
DOS命令行或批处理
能会见
些特殊标记符:
CR(0D) 命令行结束符
Escape(1B) ANSI转义字符引导符
Space(20) 常用参数界定符
Tab(09) ; = 常用
参数界定符
+ COPY命令文件连接符
* ? 文件通配符
"" 字符串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回显屏蔽符
/ 参数开关引导符
: 批处理标签引导符
% 批处理变量引导符
其次, :: 确实起
rem
注释作用, 而且更简洁有效;
有两点需要注意:
第, 除了 :: 之外, 任何
:开头
字符行,
批处理
都被视作标号, 而直接忽略其
所有内容, 只
了与正常
标号相区别, 建议使用 goto 所无法识别
标号, 即
:
紧跟
非字母数字
特殊符号.
第二, 与rem 同
, ::
字符行
执行时
会回显, 无论
否用echo on打开命令行回显状态, 因
命令解释器
认
有效
命令行,
此点来看, rem
某些场合下
比 :: 更
适用; 另外, rem
用于 config.sys 文件
.
也使用
下
用法:
if exist command
device 指DOS系统
已加载
设备,
win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具体内容会因硬软件环境
同而略有差异, 使用
些设备名称时, 需要保证
下三点:
1. 该设备确实存(由软件虚拟
设备除外)
2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)
3. 该设备已准备好(主要指a: b: ..., com1..., lpt1...等)
通过命令 mem/d | find "device" /i 来检阅
系统
所加载
设备
另外, DOS系统
, 设备也被认
种特殊
文件, 而文件也
称作字符设备; 因
设备(device)与文件都
使用句柄(handle)来管理
, 句柄
名字, 类似于文件名, 只
过句柄
应用于磁盘管理, 而
应用于内存管理而已, 所谓设备加载也即指
内存
其分配
引用
句柄.
CMD命令字符
最新推荐文章于 2024-08-14 15:04:34 发布