您的位置:首页 > 其它

更好的使用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就可以了, 哇嘎嘎
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CMD设置 doskey