window的dos命令学习笔记 七

一、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 off
ping 192.168.1.1
IF ERRORLEVEL 1 goto MySuccess
IF ERRORLEVEL 0 goto MyFail

:MyFail
echo 命令执行成功!
goto Goodbye
:MySuccess
echo 命令执行失败!
goto Goodbye
:Goodbye
echo 命令已执行,结果显示在上面。
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 off
set a=10
set b=0
:tex
set /a a+=3
set /a b+=1
mode con cols=%a% lines=%b%
if %a% lss 60 goto :tex

echo O(∩_∩)O 圣诞快乐 O(∩_∩)O
set a=15,a6,2e,d0,34,8b,4f,9d,5e
for %%i in (%a%) do (
ping -n 2 127.1>nul
color %%i
)
for %%i in (%a%,%a%) do (
ping -n 1 127.1>nul
color %%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.txt
del ms.txt
pause

执行即可:

四、mshta

@echo off
echo 做好准备,响了啊!!
pause

cls
call :voice
echo 怎么样?呵呵,刺激吧~
pause&goto:eof

:voice
mshta vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")(window.close)
pause
goto: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
:begin
cls
set/p file=请输入要处理的文件(Q 键直接退出此脚本):
        if /i "%file%"=="Q" goto :eof
        if "%file%"=="" goto error
set new=%random%
for %%a in (%file%) do set size=%%~za
        if "%size%"=="0" goto error
cls&fsutil file createnew %new% %size% >nul
echo=&&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 EnableDelayedExpansion
for /f "skip=1 tokens=3" %%a in ('fc /B %new% %file%') do (
        set num=%%a
        set /a num=0x!num!
        set /p=!num! <nul
)
del %new%
endlocal&echo;&echo==========================================================&echo;&pause
exit /b 0

:error
        cls&echo;&echo;
        echo         “输入错误” OR “文件大小为零”,请重新输入……
        del %new% >nul 2>nul
        set file=
        set new=
        pause>nul&goto :begin

执行效果:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

六、一些杂点:

发现之前的学习过的知识点中还有一些比较实用的地方,但是之前没有注意到,再来补充补充。当然还有一些没有讲过的。

1、@符合的另一个用法:

之前学习了for的时候,发现后面可以跟上@和一些批处理命令。然后我想到了,如果和我之前的成绩分类的call用@替代,是否可以?

然后我测试了下。
之前的写法:

@echo off
:return1
set 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 pause
call exit
)

if %score% GTR 80 (
echo "良好" 
call pause
call exit
)

if %score% GTR 70 (
echo "中等" 
pause
call exit
)

if %score% GTR 60 (
echo "及格" 
call pause
call exit
)
if (%score% LSS 60) (
echo "不及格" 
call pause
call exit
)

用@替代call:之前写这一点特别印象深刻,为了实现输入数字之后,直接将输出分类并且停顿然后退出,我当时搞了好久才弄成功这个效果。

@echo off
:return1
set 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
:return1
set 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 off
title 这是一个title
pause

点击运行之后:

在这里插入图片描述

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的保存的目录。

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章