【Windows批處理】常用命令

介紹

批處理(Batch),也稱爲批處理腳本。顧名思義,批處理就是對某對象進行批量的處理。批處理文件的擴展名爲 bat

批處理文件,或稱爲批處理程序,是由一條條的DOS命令組成的普通文本文件,可以用記事本直接編輯或用DOS命令創建

批處理可以在dos系統或windows系統上運行,所以批處理的命令比dos的命令要多,基本都是dos命令組成,但多了些流程控制命令

創建批處理文件

使用copy con命令創建

啓動命令行,默認來到用戶目錄,運行 copy con 來創建批處理文件,將屏幕上輸入的內容保存在 test.bat 中,使用 ctrl + z,然後按回車來保存
在這裏插入圖片描述
輸入 test.bat 可以直接運行,如果當前目錄下不存在 a.txt
在這裏插入圖片描述
echo hello> a.txt可以創建 a.txt 內容爲 hello,使用 dir 來查看當前目錄下文件看是否創建成功,如果存在 a.txt
在這裏插入圖片描述

使用記事本創建

新建 test.txt,內容如下,保存後,修改後綴 .txt 爲 .bat
在這裏插入圖片描述
打開 cmd 運行
在這裏插入圖片描述

語法

echo

echo [message]:顯示信息
echo {[on/off]}:開/關回顯功能,如果將@echo off`放最前面,將不會顯示命令本身,只顯示輸出結果

其中 type 可以顯示文本文件的內容

echo on
type a.txt
echo off
echo Hello

在這裏插入圖片描述
可以看出,echo off 關閉回顯(但其本身仍然會回顯), 接下來的命令行不會回顯

@

@用於關閉本命令回顯,@ 並不受echo狀態的影響,例如 @echo on,這條命令不顯示,@type a.txt這條命令不顯示,但命令執行結果(查看a.txt內容)會顯示。

@echo on
@type a.txt
echo off
echo Hello

在這裏插入圖片描述
@只針對當前行有效,echo on/off針對後邊的命令有效,直到下一個 echo on/off 命令出現

pause

pause用於暫停批處理的執行器並給出提示信息,然後由用戶決定是繼續執行還是終端執行

@echo off
echo pause命令測試...
pause
echo Hello World

執行pause以後會提示一句話【按任意鍵繼續執行】
①當我們按任意鍵的時候,繼續執行pause後面的語句,也是說繼續執行
在這裏插入圖片描述
②當我們按ctrl+C的時候,會提示出,是不要終止批處理的提示,並且這個時候可以選擇是繼續還是終止
在這裏插入圖片描述

call

call命令用來從一個批處理腳本中調用另一個批處理腳本,並且能夠調用指定標號後的命令(注意調用時必須在標籤名前加冒號)。調用完畢後回到調用處繼續執行後邊的命令,這也就是爲什麼 A 後邊的內容輸出了兩遍,看例子:

test.bat內容

@echo off
echo 正在調用called.bat...
call called.bat
echo 調用完畢called.bat...
echo 現在調用 A 標號後的內容...
call :A

:A
echo This is A

called.bat內容

@echo off
echo This is called.bat

在這裏插入圖片描述

rem

rem 爲註釋命令,該命令後的內容不被執行,但能回顯

在 test.bat 中列出 後綴爲 .bat 的文件

@echo off
rem 這是一個簡單的批處理命令
dir *.bat

在這裏插入圖片描述
當 剛纔的第一行 改爲 @echo on,rem 能回顯,但實際執行的時候,計算機會忽略 rem 這一行
在這裏插入圖片描述

set

set是專門用來創建、設置、查看或刪除環境變量

@echo off
set xxx="C:\Users\00lix\Desktop\test\video"
set yyy="D:\KuGou"
echo 顯示以x開頭的變量
set x
dir /w %xxx%
rem 刪除名爲xxx的變量
set xxx=

在這裏插入圖片描述
解釋下 命令。首先 使用 set 變量=值爲 xxx 和 yyy 分別賦值,也就是兩個路徑
然後使用 set 參數來顯示該變量或以該字符串爲前綴的變量
dir /w 以寬格式顯示列表,在每一行上最多顯示 5 個文件名或目錄名
最後使用set 變量名=刪除該變量,注意:等號後面不能有空格

goto

goto label 跳轉到要執行的標籤,標籤由冒號與標籤名組成

  • 多個標籤之間要加上exit終止程序繼續向下運行
  • 同名的標籤,程序執行最上面的一個
  • 標籤名必須是常量,不能是變量
  • 標籤名中可使用空格,但不得包括其他分隔符(例如分號或等號)
  • 命令只使用標籤的前八個字符
@echo off
echo 跳過中間的命令,執行最後一條
goto last
echo 111
echo 222

:last
echo 333

在這裏插入圖片描述

start

啓動單獨的“命令提示符”窗口來運行指定程序或命令。如果在沒有參數的情況下使用,start 將打開第二個命令提示符窗口,命令格式如下,還有很多參數,自行百度

start ["title"] [/WAIT][command/program]
“title”:在窗口標題欄中顯示的標題
WAIT:啓動應用程序並等候它結束

@echo off
echo 將在新窗口中顯示a.txt的內容
start "a.txt"的內容 /wait type a.txt
echo 已從新命令窗口返回

在這裏插入圖片描述
運行程序後,打開了新窗口執行了命令,因爲加了 /wait ,所以把新窗口關閉後,才能回到第一個窗口繼續執行

if

如果 if 後面判斷爲真後,只處理單句命令的話,直接跟在 後面就可以
如果 判斷爲真後,需要執行多條命令的話,則需要用括號將多條命令擴起來
注意: 括號“(” 要位於跟 if 同一行,如果不在同一行的話執行時會報語法錯誤
注意2:多層嵌套的if語法如下

if exist a.txt (
  if exist 1.txt (
    echo 存在 a.txt 和 1.txt
  ) else (
    echo 存在 a.txt 但是不存在 1.txt
  )
) else if exist b.txt (
  echo 不存在 a.txt 但是存在 b.txt
) else (
  echo 不存在 a.txt 和 b.txt
)

如果你要將 else if 換行,需要在 “)” 後面添加 “^” 符號。

用法1:判斷文件是否存在

@echo off
if exist a.txt (echo 存在a.txt) else (echo 不存在a.txt)

用法2:判斷某兩個字符串是否相等

@echo off
if "abc"=="abc" (echo 相等) else (echo 不相等)

默認情況if語句是區分大小寫,可以添加/i參數取消大小寫區分

@echo off
if /i "ABC"=="abc" (echo 相等) else (echo 不相等)

運行結果
在這裏插入圖片描述
用法3:判斷數值是否相等
EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於

@echo off
if 1 equ 2 (echo 1和2相等) else (echo 1和2不相等)

用法4:判斷某個變量是否已經被賦值

@echo off
set var1=123
if defined var1 echo var1被定義了,值爲%var1%
if defined var2 (echo var2被定義了) else (echo var2沒被定義)

在這裏插入圖片描述
用法5:if結合errorlevel使用
IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值
環境變量errorlevel的初始值爲0,當一些命令執行不成功,就會返回一個數值,如:1 ,2 等

for

@echo off
set /a sum=0
for %%x in (*.txt) do (
	echo %%x文件內容如下:
	type %%x
	echo.
	set /a sum=sum+1
)
echo 一共顯示了%sum%個文本文件

在這裏插入圖片描述
set /a 是指定一個變量等於一串運算字符
echo.相當於我們打字時按了一下回車
%%x是for語句中對形式變量的引用

setlocal

啓動批處理文件中環境變量的本地化。本地化將持續到出現匹配的 endlocal 命令或者到達批處理文件結尾爲止

@echo off
setlocal
path=d:\
echo 局部環境變量path的值:
set path
endlocal
echo 系統環境變量path的值:
set path

在這裏插入圖片描述
set path 是查看path環境變量的值

shift

更改批處理文件中可替換參數的位置
語法:Shift [/n]
設置批處理從第n個參數開始移位,n的值爲0~8

@echo off
:round
if "%0"=="" goto end
echo %0內容如下:
type %0
echo.
shift
goto round
:end

在這裏插入圖片描述
首先是一個 round 標籤,先判斷第一個參數是否爲空,如果爲空則表示沒提供參數,程序直接結束
參數不爲空時,顯示文件內容
遇到shift時, shift 將所有參數往前移動一位
%0 是第一個 test.bat
%1 是 a.txt
%2 是 b.txt

* 和 ?

*表示任意多個字符,包括0個
?表示任意單個字符

@echo off
if exist *.txt echo 當前文件夾下有文本文件
echo 以a開頭的目錄如下:
dir /d /w /b a*
echo.
echo 以dk開頭、第三個字符爲任意字符、第四個字符爲t、擴展名爲三個字符且以do開頭的文件如下:
dir /b /w dk?t.do?

在這裏插入圖片描述
dir 的參數可以使用 dir /?來查看

<、>、>>

這批處理程序中的3個重定向符號,用於控制數據的輸入或輸出方式。<符號的右邊是數據源,左邊代表數據目的地;>>>符號的左邊是數據源,>會替換目的數據,而>>符號是將數據源添加到目標數據之後

@echo off
echo 正在自動創建的批處理...
echo type a.txt > auto.bat
echo dir /b /w >> auto.bat
echo 被自動創建的auto.bat文件的內容如下:
type auto.bat
echo.
echo 排序後的auto.bat爲:
sort < auto.bat

在這裏插入圖片描述
打開新創建的 auto.bat,內容如下:

echo type a.txt > auto.bat是把 type a.txt輸入到 auto.bat 中,替換
echo dir /b /w >> auto.bat是把 dir /b /w追加到 auto.bat 中
sort < auto.bat 是把 auto.bat 的內容 傳遞給 sort 進行排序

|

管道符|將一個命令的輸出數據提取出來,然後將提取的數據作爲另一個命令的輸入

@echo off
find "naughty" story.txt | sort > result.txt
echo 對包含“naughty”單詞的行排序後如下:
type result.txt

其中 story.txt 內容如下:
在這裏插入圖片描述
在這裏插入圖片描述

批處理首先在“story.txt"文件中找出所有包含“naughty”的行,接着將找出的結果通過|傳給“sort" 命令進行排序,最後將排序結果保存到“result.txt" 文件

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