文章目录
一、dos历史学习笔记(后期整合到这里,我想能学到这里的应该不多了,嘿嘿,加油)二、执行状态返回值(`%errorlevel%`,和shell中`$?`相似):三、视窗1、color2、mode3、msg4、 视窗DIY举例:四、mshta参考的mshta命令用法示例:五、ASCII码六、一些杂点:1、@符合的另一个用法:@总结:2、TITLE(标题)3、find(查找)①、`/V`参数(可以理解为反选,和shell的grep -v功能类似)②、不带参数:③、`/C`只显示含有匹配到的字符串的行数④、`/i`,不区分大小写4、cd /d5、pushd 和 popd一、dos历史学习笔记(后期整合到这里,我想能学到这里的应该不多了,嘿嘿,加油)
这个是我所以的dos学习笔记,希望对感兴趣的你有所帮助,如有错误,还望不吝赐教。如果对你有帮助,希望给我点个赞哈,Thanks♪(・ω・)ノ
学习主要还是靠坚持,如果真的觉得学一个知识,就坚持下去;三天打鱼俩天晒网,真的不如躺着歇,刷刷剧,或者玩俩局游戏。。。
window的dos命令学习笔记 一
window的dos命令学习笔记 二
window的dos命令学习笔记 三
window的dos命令学习笔记 四
window的dos命令学习笔记 五
window的dos命令学习笔记 六
window的dos命令学习笔记 七
window的dos命令学习笔记 八— bat文件打包成exe程序(实现脚本加密)
window的dos命令学习笔记 九— bat使用小工具
二、执行状态返回值(%errorlevel%
,和shell中$?
相似):
有些命令在执行之后将会返回一定的错误值(errorlevel),可以通过errorlevel的值判断命令执行的状况。
获取返回值errorlevel的方法就是,在执行命令后,立马调用返回值errorlevel,如echo %errorlevel%
或者if %errorlevel%==1
等命令。当返回值为0就是执行成功,当返回值为1表示不成功。
比如:
分别以:192.168.1.1和8.8.8.8俩个ip进行ping测试:
@echo offping 192.168.1.1IF ERRORLEVEL 1 goto MySuccessIF ERRORLEVEL 0 goto MyFail:MyFailecho 命令执行成功!goto Goodbye:MySuccessecho 命令执行失败!goto Goodbye:Goodbyeecho 命令已执行,结果显示在上面。pause
执行结果:
将需要ping的ip换成8.8.8.8,结果就成功了。可以看出8.8.8.8这个ping成功了。其实这个状态码和shell的$?
有相似的效果,shell中的$?
shell脚本中:
if [ $? -ne 0 ];then上一命令执行失败时的操作else上一命令执行成功时的操作fi
其中,-ne代表不等于,$?代表状态值。
三、视窗
首先我们要DIY它的窗口。使用命令:color、mode、msg。
–1、设置窗口背景色和字体颜色by color。详细内容参见color /?。
–2、设置窗口大小by “MODE CON [COLS=c] [LINES=n]”,cols即宽度,lines即高度。
–3、GUI交互窗口by msg。详细内容参见msg /?。
1、color
设置默认的控制台前景和背景颜色。
COLOR [attr]
attr 指定控制台输出的颜色属性。
颜色属性由两个
十六进制数字指定 –第一个
对应于背景,第二个
对应于前景。每个数字
可以为以下任何值:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色
如果没有给定任何参数,此命令会将颜色还原到 CMD.EXE 启动时的颜色。这个值来自当前控制台窗口、/T 命令行开关或 DefaultColor 注册表值。
如果尝试使用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1。
示例:
"COLOR fc"
在亮白色上产生淡红色
2、mode
cols即宽度,lines即高度。
mode con cols=50 lines=20
执行之后窗口自动变小了。
、
再次输入mode,不加任何参数:即显示状态信息。
3、msg
E:\000dos\7笔记七>msg /?将消息发送给用户。MSG {username | sessionname | sessionid | @filename | *}[/SERVER:servername] [/TIME:seconds] [/V] [/W] [message]username 标识指定的用户名。sessionname 会话名。sessionid 会话 ID。@filename 识别这样一个文件,该文件含有将所发消息发送到的用户名、会话名和会话标识号的列表。* 给指定服务器上的所有会话发送信息。/SERVER:servername 要联系的服务器(默认值是当前值)。/TIME:seconds 等待接收器确认消息的时间延迟。/V 显示有关执行的操作的信息。/W 等待用户的响应,跟 /V 一起有用。message 要发送的消息。如果没有指定,发出提示,或者从 stdin读取。
4、 视窗DIY举例:
@echo offset a=10set b=0:texset /a a+=3set /a b+=1mode con cols=%a% lines=%b%if %a% lss 60 goto :texecho O(∩_∩)O 圣诞快乐 O(∩_∩)Oset a=15,a6,2e,d0,34,8b,4f,9d,5efor %%i in (%a%) do (ping -n 2 127.1>nulcolor %%i)for %%i in (%a%,%a%) do (ping -n 1 127.1>nulcolor %%i)>>ms.txt echo*/. . . *.>>ms.txt echo.\* . [] * __>>ms.txt echo*/ . ./\~~~~~~~~~~~~'\. ^|◆>>ms.txt echo \* ,/,..,\,...........,\.◆>>ms.txt echo ^|^| ..▎# ▎田 田 ▎ ^| ▎◆>>ms.txt echo ^|^| ^&^&▎ ▎ ▎'^|'▎ o>>ms.txt echo ^|^| ##■■■■■■■■■■〓msg %username% /w /time:3600 <ms.txtdel ms.txtpause
执行即可:
四、mshta
@echo offecho 做好准备,响了啊!!pauseclscall :voiceecho 怎么样?呵呵,刺激吧~pause&goto:eof:voicemshta vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")(window.close)pausegoto:eof
结束控制:
–1、暂停批处理:直接按键盘上的Pause键喽
–2、终止批处理:组合键Ctrl+C。不过,有时候它好像响应的不太积极啊
参考的mshta命令用法示例:
参考原文章地址
防止内容丢失,我把作者的内容复制过来了,欢迎去看原博主写的。
JS:
复制代码代码如下:
mshta vbscript:window.execScript("alert('hello world!');","javascript")
VBS:
复制代码代码如下:
mshta javascript:window.execScript("msgBox('hello world!'):window.close","vbs")
调用VBS,分别使用MSGBOX函数和POPUP方法:
复制代码代码如下:
mshta vbscript:msgbox("该干活了,伙计!",64,"提示")(window.close) mshta vbscript:CreateObject("Wscript.Shell").popup("该干活了,伙计!",7,"提示",64)(window.close)
execute方法 一条语句连续弹二个信息框:
复制代码代码如下:
mshta vbscript:execute("msgbox ""one BOX"":msgbox ""two BOX"":window.close")
LZ他们弄的,调用系统的英文阅读:
复制代码代码如下:
mshta vbscript:createobject("sapi.spvoice").speak("Good luck")(window.close)
五、ASCII码
ASCII码是图形化的符号,可以用来点缀我们的批处理的。
在cmd窗口中我们可以通过任意一个字符的ASCII码来输入该字符,比如Ctrl+G、Ctrl+N等,字母a-z对应ASCII码的1-26。对于ASCII码大于26的字符,可以通过这个方法来输入:按住Alt键不松,通过小键盘输入ASCII码的十进制值,松开Alt键即可。
下面这个批处理,可以把一个文件中的字符的ASCII码遍历打出来。
@echo off&mode con cols=80:beginclsset/p file=请输入要处理的文件(Q 键直接退出此脚本):if /i "%file%"=="Q" goto :eofif "%file%"=="" goto errorset new=%random%for %%a in (%file%) do set size=%%~zaif "%size%"=="0" goto errorcls&fsutil file createnew %new% %size% >nulecho=&&echo=文件内容为为:&echo==========================================================@type %file%echo=&echo==========================================================&echo=&&echo=文件内容所对应的ASCII码的十六进制形式依次为:&echo==========================================================for /f "skip=1 tokens=3" %%a in ('fc /B %new% %file%') do (set /p=%%a <nul)echo=&echo==========================================================&echo=&echo=&echo=文件内容所对应的ASCII码的十进制形式依次为:&echo==========================================================setlocal EnableDelayedExpansionfor /f "skip=1 tokens=3" %%a in ('fc /B %new% %file%') do (set num=%%aset /a num=0x!num!set /p=!num! <nul)del %new%endlocal&echo;&echo==========================================================&echo;&pauseexit /b 0:errorcls&echo;&echo;echo “输入错误” OR “文件大小为零”,请重新输入……del %new% >nul 2>nulset file=set new=pause>nul&goto :begin
执行效果:
六、一些杂点:
发现之前的学习过的知识点中还有一些比较实用的地方,但是之前没有注意到,再来补充补充。当然还有一些没有讲过的。
1、@符合的另一个用法:
之前学习了for的时候,发现后面可以跟上@和一些批处理命令。然后我想到了,如果和我之前的成绩分类的call用@替代,是否可以?
然后我测试了下。
之前的写法:
@echo off:return1set score=set /p score=请输入成绩rem 用来判断是否格式正确if %score% LSS 0 (echo "输入的成绩分数不对:%score%(分数0-100之间),请再次输入:" goto return1) if %score% GTR 100 (echo "输入的成绩分数不对:%score%(分数0-100之间),请再次输入:" goto return1) if %score% GTR 90 (echo "优秀" call pausecall exit)if %score% GTR 80 (echo "良好" call pausecall exit)if %score% GTR 70 (echo "中等" pausecall exit)if %score% GTR 60 (echo "及格" call pausecall exit)if (%score% LSS 60) (echo "不及格" call pausecall exit)
用@替代call:之前写这一点特别印象深刻,为了实现输入数字之后,直接将输出分类并且停顿然后退出,我当时搞了好久才弄成功这个效果。
@echo off:return1set score=set /p score=请输入成绩rem 用来判断是否格式正确if %score% LSS 0 (echo "输入的成绩分数不对:%score%(分数0-100之间),请再次输入:" goto return1) if %score% GTR 100 (@echo "输入的成绩分数不对:%score%(分数0-100之间),请再次输入:" @goto return1) if %score% GTR 90 (echo "优秀" @pause@exit)if %score% GTR 80 (echo "良好" @pause@exit)if %score% GTR 70 (echo "中等" @pause@exit)if %score% GTR 60 (echo "及格" @pause@exit)if (%score% LSS 60) (echo "不及格" @pause@exit)
效果和之前的一样,说明除了我之前的call,使用@符合也是可以的。
使用&也可以达到之前的效果:
@echo off:return1set score=set /p score=请输入成绩rem 用来判断是否格式正确if %score% LSS 0 (echo "输入的成绩分数不对:%score%(分数0-100之间),请再次输入:" goto return1) if %score% GTR 100 (@echo "输入的成绩分数不对:%score%(分数0-100之间),请再次输入:" @goto return1) if %score% GTR 90 (echo "优秀" &pause&exit)if %score% GTR 80 (echo "良好" &pause&exit)if %score% GTR 70 (echo "中等" &pause&exit)if %score% GTR 60 (echo "及格" &pause&exit)if (%score% LSS 60) (echo "不及格" &pause&exit)
@总结:
我们之前只知道echo off关闭回显,加入@之后,命令也会显示,只显示@后面名称处理的结果,显示结合我这个成绩分类,能达到和call的效果。
2、TITLE(标题)
设置cmd窗口的标题
比如:
@Echo offtitle 这是一个titlepause
点击运行之后:
3、find(查找)
E:\000dos\7笔记七>find /?在文件中搜索字符串。FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]/V 显示所有未包含指定字符串的行。/C 仅显示包含字符串的行数。/N 显示行号。/I 搜索字符串时忽略大小写。/OFF[LINE] 不要跳过具有脱机属性集的文件。"string" 指定要搜索的文本字符串。[drive:][path]filename指定要搜索的文件。如果没有指定路径,FIND 将搜索在提示符处键入的文本或者由另一命令产生的文本。
①、/V
参数(可以理解为反选,和shell的grep -v功能类似)
②、不带参数:
不带参数就是查找含有字符串的行
③、/C
只显示含有匹配到的字符串的行数
④、/i
,不区分大小写
4、cd /d
之前我一直好奇为什么我在cmd中直接切换到e盘或者D盘就是不成功,但是在linux中确实可以随便切换的,然后我就好奇,试试,偶然发现带上/d
参数就可以了。
E:\000dos\7笔记七>cd /?显示当前目录名或改变当前目录。CHDIR [/D] [drive:][path]CHDIR [..]CD [/D] [drive:][path]CD [..].. 指定要改成父目录。键入 CD drive: 显示指定驱动器中的当前目录。不带参数只键入 CD,则显示当前驱动器和目录。使用 /D 开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。如果命令扩展被启用,CHDIR 会如下改变:当前的目录字符串会被转换成使用磁盘名上的大小写。所以,如果磁盘上的大小写如此,CD C:\TEMP 会将当前目录设为C:\Temp。CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个带有空格但不带有引号的子目录名。例如:cd \winnt\profiles\username\programs\start menu与下列相同:cd "\winnt\profiles\username\programs\start menu"在扩展停用的情况下,你必须键入以上命令。
比如我的切换效果:
从上面的效果来看,不带/d的时候,在自己盘符可以随便切换目录,但如果想跳转盘符确实需要加上/d就可以了,这点和shell有区别,不过可能因为Linux没有这个盘符区分的原因吧。
还有一点,只有cd时,返回的就是当前目录地址,就和shell的pwd的功能。
5、pushd 和 popd
pushd:保存当前的目录
popd:回到刚刚pushd的保存的目录。