更好的使用CMD
2015-12-05 12:27
169 查看
工作还是离不开CMD, 虽然没有BASH好用, 还是能完成大量任务的, 只是需要挖掘.
本文边收集好玩的特性边作整理.
DOS基本语法说明请参考DOS高级教程, 网上搜索都是转载一大片;
另外DOS命令可以在CMD中使用/?来阅读命令说明,
或者参考MSDOS官网: https://technet.microsoft.com/en-us/library/bb490890.aspx
另外一个比较专注DOS脚本的网站: http://www.dostips.com
第一条教训: if/for语句要简洁, 越简单越好, 否则等着吃延迟变量的苦头吧----要么延迟变量也搞不定你的问题, 要么变量扩展复杂到刚写完就不知道什么意思了.
所以if/for语句要像普通语句一样简单就好.
1. 增加alias:
这个是bash等都有的非常便利的特性, CMD也有, 只是比较隐蔽, 方法是利用doskey:
reg add "HKCU\Software\Microsoft\Command Processor" /v Autorun /t REG_EXPAND_SZ /d "doskey l=ls & doskey la=ls -a & doskey ll=ls -la & cd /d ^%userprofile^%\Desktop & prompt $P[$T$H$H$H$H$H$H]$G$S"
win10下可以设置彩色提示符: doskey l=ls & doskey la=ls -A & doskey ll=ls -al & cd %userprofile%\Desktop & prompt $E[33;40;1m$P[$T$H$H$H$H$H$H]$G$S$E[0m
Autorun可以设置CMD启动时会执行的操作, 在CMD中执行上面命令后重启CMD就可以玩了.
其中ls来自UnxUtils工具包(for windows版本): http://sourceforge.net/projects/unxutils/
2. 计算字段个数:
不知道有没有更好的方式, 暂时如下:
call :number_of delim "list_of_fileds"
set get_numer=%NF%
:number_of
set NF=0
set str="%~2"
:repeat_inner
for /f "tokens=1* delims=%~1" %%i in (%str%) do (
set /a NF+=1
set str="%%j"
goto repeat_inner
)
goto :EOF
3. 模拟数组, 索引从1开始, 第0个元素存放数组长度
注意nul设备及set /p的使用
REM setup array
set b[0]=5
for /l %%i in (1 1 %b[0]%) do (
set b[%%i]=a
)
REM print array
setlocal enabledelayedexpansion
for /l %%i in (1 1 %b[0]%) do (
set /p a=!b[%%i]! <nul
)
endlocal
4. subst: 为路径分配虚拟光驱
对于经常访问但路径又很深的目录, 要么加书签, 要么直接分配一个虚拟光驱吧:
subst n: d:\path\to\deep\directory
5. assoc和ftype
这两个经常一起使用,主要是关联文件的默认打开程序, 步骤是assoc将文件扩展名关联到某一文件类型, 再使用ftype将这一类型文件关联到某个默认打开程序:
assoc .log=txtfile
ftype txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1
6. 转义字符^
adb shell echo 0x09 ^> /d/xx/panel_off
如果不加^, 则由CMD处理>重定向, 肯定会出错; 加上^符号后, DOS把>重定向符号作为普通字符处理, 再由adb shell来处理这条命令, 成功执行.
7. 大段文档说明作注释方法:
goto MAIN
此处为文档说明文字....
blabla
省略一万字...
:MAIN
感谢, 这个是从别处学到得, 原网地忘记了, 抱歉.
8. 模拟eval
这个几乎任何脚本都支持的操作, 在DOS中就需要绕个弯来实现:
set cmd=echo a b c
call %cmd%
9. start 重开CMD执行指定的命令或程序
但如果程序找不到, 并且匹配到一条路径, 则使用文件浏览器打开, 经常使用的就是打开当前路径: start . #注意后面的点号
10. 更换prompt
prompt $E[33;40;1m$P[$T$H$H$H$H$H$H]$G$S$E[0m
为使永久生效, 需要添加到注册表CMD的Autorun中
11. CMD字体和颜色设置
这两个可以任意修改, 方法是修改注册表, 在HKLM\Software\Microsft\Windows NT\CurrentVersion\Console\TrueTypeFont下增加字体定义和代码页定义(codepage)
唯一的多个"0"表示新增加的字体定义, 再新建表项名为"850"等codepage(可以在technet官网上找到), 之后CMD右键属性修改字体选择颜色等, 保存后,
会在HKCU\Console\%SystemRoot%_system32_cmd.exe项下面保存之前的设置, 导出这些所有的配置吧, 可以方便将来使用, 导入到其它机器上.
12. delay/sleep: 只能模拟
比较接近1秒: ping -n 2 -w 1 127.0.0.1>nul
想要delay几秒就把上面的for循环一下吧.
13. echo转义输出字体颜色
有两种方法都比较简单:
第一种方法是:
使用DOS的ansi设备驱动, 但是较新windows系统不再保留ansi.sys文件, 所以这个驱动就不能用了.
不过可以从minGW等这些软件上找到, 将此文件copy到CMD启动时所在目录, 并新建一个文件名为config.sys, 内容是device=ansi.sys
之后启动CMD就可以echo带颜色的字体了, 嗷嗷...如下:
echo ^[[34;43mexample^[[0m
转义序列为\e[#;#...;mecho_string\e[0m 其中\e为特殊字符, 输入方法是按住Alt并输入小键盘上数字27即可.
关于ANSI escape code请参考: https://en.wikipedia.org/wiki/ANSI_escape_code
注: 也可直接将ansi.sys及config.sys直接放到%windir%\system32\目录下.
经测试WIN10上加强了CMD已经支持转义序列颜色输出, 所以不再需要上述的操作了, 嘎嘎...
第二种方法是:
使用ansicon工具, 顺便可以学学这个东东是怎么弄的,有源码的, 请参考: https://github.com/adoxa/ansicon
如同其主页上的说明, 可以安装(ansicon -i)以后直接使用, 也可以不安装只是需要ansicon -e来echo带颜色字体.
14. CMD命令输出的拷贝:
通常在CMD中有些命令的输出是需要copy的, 而鼠标块模式的拷贝实在不爽, 幸而可以借助clip来解决, 如下:
ipconfig | clip
15. 返回状态return code:
通常执行命令成功时返回时0失败返回非0, 对于CMD批处理文件中函数的返回状态码可以使用exit来表示, 如下:
exit/b0 返回0表示函数执行成功, 同时设置errorlevel为0
exit/b1 返回1表示函数执行失败, 同时设置errorlevel为1
在每次函数执行结束时需要注意如果执行成功了一定要执行exit/b0, 因errorlevel不会自动恢复为0
WINDOWS设置:
1, 增加开机启动项:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run \v subst \t REG_EXPAND_SZ \d subst t: \path\too\deep\directory
此处, \v指定的参数仅仅是启动项的名称, 可以随意写; \d指定的参数即开机要执行的命令.
2, 增加/修改/删除右键功能,
还不能做到随意修改; TODO
3, GodMode, 即完全控制面板:
任意地方新建文件夹, 命名为GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}即可会看到神奇的GodMode, 此包含很多windows设置;
此后, 任意打开文件夹在地址栏中输入godmode就可以了, 哇嘎嘎
本文边收集好玩的特性边作整理.
DOS基本语法说明请参考DOS高级教程, 网上搜索都是转载一大片;
另外DOS命令可以在CMD中使用/?来阅读命令说明,
或者参考MSDOS官网: https://technet.microsoft.com/en-us/library/bb490890.aspx
另外一个比较专注DOS脚本的网站: http://www.dostips.com
第一条教训: if/for语句要简洁, 越简单越好, 否则等着吃延迟变量的苦头吧----要么延迟变量也搞不定你的问题, 要么变量扩展复杂到刚写完就不知道什么意思了.
所以if/for语句要像普通语句一样简单就好.
1. 增加alias:
这个是bash等都有的非常便利的特性, CMD也有, 只是比较隐蔽, 方法是利用doskey:
reg add "HKCU\Software\Microsoft\Command Processor" /v Autorun /t REG_EXPAND_SZ /d "doskey l=ls & doskey la=ls -a & doskey ll=ls -la & cd /d ^%userprofile^%\Desktop & prompt $P[$T$H$H$H$H$H$H]$G$S"
win10下可以设置彩色提示符: doskey l=ls & doskey la=ls -A & doskey ll=ls -al & cd %userprofile%\Desktop & prompt $E[33;40;1m$P[$T$H$H$H$H$H$H]$G$S$E[0m
Autorun可以设置CMD启动时会执行的操作, 在CMD中执行上面命令后重启CMD就可以玩了.
其中ls来自UnxUtils工具包(for windows版本): http://sourceforge.net/projects/unxutils/
2. 计算字段个数:
不知道有没有更好的方式, 暂时如下:
call :number_of delim "list_of_fileds"
set get_numer=%NF%
:number_of
set NF=0
set str="%~2"
:repeat_inner
for /f "tokens=1* delims=%~1" %%i in (%str%) do (
set /a NF+=1
set str="%%j"
goto repeat_inner
)
goto :EOF
3. 模拟数组, 索引从1开始, 第0个元素存放数组长度
注意nul设备及set /p的使用
REM setup array
set b[0]=5
for /l %%i in (1 1 %b[0]%) do (
set b[%%i]=a
)
REM print array
setlocal enabledelayedexpansion
for /l %%i in (1 1 %b[0]%) do (
set /p a=!b[%%i]! <nul
)
endlocal
4. subst: 为路径分配虚拟光驱
对于经常访问但路径又很深的目录, 要么加书签, 要么直接分配一个虚拟光驱吧:
subst n: d:\path\to\deep\directory
5. assoc和ftype
这两个经常一起使用,主要是关联文件的默认打开程序, 步骤是assoc将文件扩展名关联到某一文件类型, 再使用ftype将这一类型文件关联到某个默认打开程序:
assoc .log=txtfile
ftype txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1
6. 转义字符^
adb shell echo 0x09 ^> /d/xx/panel_off
如果不加^, 则由CMD处理>重定向, 肯定会出错; 加上^符号后, DOS把>重定向符号作为普通字符处理, 再由adb shell来处理这条命令, 成功执行.
7. 大段文档说明作注释方法:
goto MAIN
此处为文档说明文字....
blabla
省略一万字...
:MAIN
感谢, 这个是从别处学到得, 原网地忘记了, 抱歉.
8. 模拟eval
这个几乎任何脚本都支持的操作, 在DOS中就需要绕个弯来实现:
set cmd=echo a b c
call %cmd%
9. start 重开CMD执行指定的命令或程序
但如果程序找不到, 并且匹配到一条路径, 则使用文件浏览器打开, 经常使用的就是打开当前路径: start . #注意后面的点号
10. 更换prompt
prompt $E[33;40;1m$P[$T$H$H$H$H$H$H]$G$S$E[0m
为使永久生效, 需要添加到注册表CMD的Autorun中
11. CMD字体和颜色设置
这两个可以任意修改, 方法是修改注册表, 在HKLM\Software\Microsft\Windows NT\CurrentVersion\Console\TrueTypeFont下增加字体定义和代码页定义(codepage)
唯一的多个"0"表示新增加的字体定义, 再新建表项名为"850"等codepage(可以在technet官网上找到), 之后CMD右键属性修改字体选择颜色等, 保存后,
会在HKCU\Console\%SystemRoot%_system32_cmd.exe项下面保存之前的设置, 导出这些所有的配置吧, 可以方便将来使用, 导入到其它机器上.
12. delay/sleep: 只能模拟
比较接近1秒: ping -n 2 -w 1 127.0.0.1>nul
想要delay几秒就把上面的for循环一下吧.
13. echo转义输出字体颜色
有两种方法都比较简单:
第一种方法是:
使用DOS的ansi设备驱动, 但是较新windows系统不再保留ansi.sys文件, 所以这个驱动就不能用了.
不过可以从minGW等这些软件上找到, 将此文件copy到CMD启动时所在目录, 并新建一个文件名为config.sys, 内容是device=ansi.sys
之后启动CMD就可以echo带颜色的字体了, 嗷嗷...如下:
echo ^[[34;43mexample^[[0m
转义序列为\e[#;#...;mecho_string\e[0m 其中\e为特殊字符, 输入方法是按住Alt并输入小键盘上数字27即可.
关于ANSI escape code请参考: https://en.wikipedia.org/wiki/ANSI_escape_code
注: 也可直接将ansi.sys及config.sys直接放到%windir%\system32\目录下.
经测试WIN10上加强了CMD已经支持转义序列颜色输出, 所以不再需要上述的操作了, 嘎嘎...
第二种方法是:
使用ansicon工具, 顺便可以学学这个东东是怎么弄的,有源码的, 请参考: https://github.com/adoxa/ansicon
如同其主页上的说明, 可以安装(ansicon -i)以后直接使用, 也可以不安装只是需要ansicon -e来echo带颜色字体.
14. CMD命令输出的拷贝:
通常在CMD中有些命令的输出是需要copy的, 而鼠标块模式的拷贝实在不爽, 幸而可以借助clip来解决, 如下:
ipconfig | clip
15. 返回状态return code:
通常执行命令成功时返回时0失败返回非0, 对于CMD批处理文件中函数的返回状态码可以使用exit来表示, 如下:
exit/b0 返回0表示函数执行成功, 同时设置errorlevel为0
exit/b1 返回1表示函数执行失败, 同时设置errorlevel为1
在每次函数执行结束时需要注意如果执行成功了一定要执行exit/b0, 因errorlevel不会自动恢复为0
WINDOWS设置:
1, 增加开机启动项:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run \v subst \t REG_EXPAND_SZ \d subst t: \path\too\deep\directory
此处, \v指定的参数仅仅是启动项的名称, 可以随意写; \d指定的参数即开机要执行的命令.
2, 增加/修改/删除右键功能,
还不能做到随意修改; TODO
3, GodMode, 即完全控制面板:
任意地方新建文件夹, 命名为GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}即可会看到神奇的GodMode, 此包含很多windows设置;
此后, 任意打开文件夹在地址栏中输入godmode就可以了, 哇嘎嘎
相关文章推荐
- 修改CMD设置使其支持鼠标选择复制
- Apache Commons-SCXML系列之项目介绍
- 适配器模式
- Windows Server 2008 网管数据采集 努力做“日拱一卒“
- 第二个spring,第一天
- nginx源码剖析(三) —— ngx_queue_t分析
- 交流电路中相位超前和滞后问题
- 奇怪的死循环
- jsp页面 URL传中文参数到Action里面出现乱码,用过滤器和控制器都解决
- redis sentinel 主从切换(failover)解决方案,详细配置
- swift开源了,iOS开发者的福音到了
- iOS美丽约网络请求分析
- LCD屛转接板引出的EMI问题
- 使用联邦(FEDERATION)访问远程的DB2数据库
- ORM框架
- 宽度优先搜索
- C++类的存储
- android - SharedPreferences
- Cygwin安装---------2015-12-05
- 宽度优先搜索