WindowsNT Command Shell 简记和参考资料
文章内容基本上试摘自以下两篇文章,仅当自学,具体的例子可以参看下边两篇文章。
WindowsXP Command Shell Overview
The WindowsNT Command Shell
另外一个十分有用的网站:http://commandwindows.com/一些高级用法的语法说明和例子:http://ss64.com/nt/syntax.html还有WMIC:Windows Management Instrumentation Command-line前言这里是cmd.exe本身的帮助
NT系统中的
command.com是为了兼容MSDOS的
16位程序(壳),它会自动启动并发送命令给cmd.exe执行。
命令行帮助(/?)中的语法:
- … 表示可以重复的单元
- [] 表示可选
- {} 表示可供选择的集合
在cmd.exe程序中的编辑命令- F4 随着你的下一个输入,从当前光标处删除至行尾,并插入新的输入
- F7 弹出命令历史菜单(可以继续使用F9,选择命令序号)
- F8 先输入你想要调用的命令(须存在于历史中),再按F8进行快速搜索匹配
- Tab 自动完成键
- Ctrl+D 自动完成目录
- Ctrl+F 自动完成文件名
命令行的语法结构Prompt + 命令名 + 参数表(通常使用空格做分隔符)
如果参数中含有分隔符就需要用双引号,如果有双引号就再套一层双引号
多个命令和条件执行:
- & 两个命令的连接符
- && 当前一个命令成功才执行第二个命令
- || 当前一个命令失败才执行第二个命令
- () 命令嵌套,另一种做法是使用cmd命令,但是需要多一次exit
- ;或, 命令的参数分隔符
特殊字符:
- & 命令连接符
- | 管道符
- () 嵌套符
- <> 管道符
- ^ 转义符
- " 字符串的开始,例如new^&name等价于"new&name"
环境变量分为系统和本地环境变量,这里的系统指作用于整个操作系统的环境变量,而本地环境变量仅作用于此cmd.exe实例,cmd.exe将自动集成其父进程的环境变量。这里是WinNT系统中的系统定义环境变量。下边按加载顺序列出环境变量(同文件的搜索路径):
1.Built-in system variables
2.System variables found in the HKEY_LOCAL_MACHINE hive
3.Local variables found in the HKEY_CURRENT_USER hive
4.All environment variables and paths set in the Autoexec.bat file
5.All environment variables and paths set in a logon script (if present)
6.Variables used interactively in a script or batch file
命令行输出结果的控制- REM 注释指令,后边可跟任意字符,本身什么也不做
- CLS 清屏
- COLOR 调色
- TITLE 命令行的窗口标题
- ECHO 命令(回馈)显示的全局开关
- @ 当行echo off(写在其后的脚本命令在执行时会被隐藏起来)
管道(重定向)命令输入默认为键盘输入,命令输出默认为命令窗口输出,命令错误输出默认为命令窗口输出。这是命令的三种流,shell提供管道,可以使这三种流重定向。详细说明看这里
- >file 输出到指定文件,也可使用设备名
- >>file 输出,如果文件已存在就追加在其后
- <file 从指定文件输入
- 2>file 从定向错误输出到指定文件,之前文件中的内容会丢失
- 2>&1 从定向错误输出到当前命令的输出环境
- cmd1 | cmd2 cmd1的输出作为cmd2的输入
命令过滤(Command Filter)尽管可以使用管道,但有些命令的最高效的执行方式莫过于使用命令过滤,即仅提取命令结果中自己需要的那个部分。WindowsNT提供了三种过滤器:
- MORE 用于将命令结果分页,dir | more, more < list.txt
- SORT 将命令结果按字母-数字序排序,dir | sort /+3, find "Jones" maillst.txt | sort
- FIND 过滤包含特殊字串的行, dir | find "<DIR>" /c, find "Pacific Rim" < trade.txt > nwtrade.txt
使用变量变量以%开始,如把下边命令存为.bat文件 “makelist.bat”:
dir %1 > %2
在命令行中输入: \文件路径\makelist SrcFolderPath DstFolderPath\list.txt
SrcFolderPath会取代%1, DstFolderPath会取代%2。
更多信息请参考: set /?
使用条件表达式内容候补,更多信息请参考:
- if /?, 仔细看帮助你会发现这里可以使用字符串比较
- for /?,仔细看看帮助,for应该是最有用的命令之一,字符串、路径解析都用它
字符串处理:
注意,后两种情况中使用了负号'-'
- %variable:~num_chars_to_skip%
- %variable:~num_chars_to_skip,num_chars_to_keep%
- %variable:~num_chars_to_skip, -num_chars_to_skip%
- %variable:~-num_chars_to_skip,num_chars_to_keep%
例子: mkdir "%date:~0,3% %date:~4,2%-%date:~7,2%-