CMD命令字符

@
\\隐藏命令回显

~
\\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具有二级转义特性fordo语句被分两级分析和解释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
些120等等都句柄说白了代号只要知道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被>、>>重定向而stderrDOS下直接重定向只有通过ctty或其命令系统控制权转交给其设备方式来间接完成

设备控制PC硬件或端口设备驱动程序或端口代码通常由系统底层或硬件驱动程序实现和支持IO.SYS实现控制台CON、系统时钟CLOCK$、未知设备CONFIG$、第串口AUX、第并口PRN、所有串口COM1~COM4、所有并口LPT1~LPT3、用盘符A:-X:及上文提空设备NUL还有许多其设备HIMEM.SYS实现XMSXXXX0EMM386.EXE实现EMMXXXX0IFSHLP.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)来管理, 句柄名字, 类似于文件名, 只过句柄应用于磁盘管理, 而应用于内存管理而已, 所谓设备加载也即指内存其分配引用句柄.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值