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

在這裏插入圖片描述

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