windows?bat腳本基礎指令詳解
1.pause
暫停批處理的執(zhí)行并在屏幕上顯示"請按任意鍵繼續(xù)..."
例如:

改腳本執(zhí)行結果為:

2.echo
顯示指令,會把需要顯示的內容展示出來。
例如:

結果為:

3.echo off
在此語句后所有運行的命令都不顯示命令行本身,但是本身的指令是會顯示出來的。
例如:

結果為:

4.@
不顯示本行命令行
例如:

結果為:

5.call
調用另一個批處理文件(如果不用call而直接調用別的批處理文件,那么執(zhí)行完那個批處理文件后將無法返回當前文件并執(zhí)行當前文件的后續(xù)命令)
創(chuàng)建另一個腳本test2.bat作為測試

分情況,
第一種,2號腳本和1號腳本在同一個目錄下

結果為:

第二種,2號腳本和1號腳本不在同一個目錄,并且2號腳本目錄包含中文路徑。

結果報錯:

這是因為中文路徑系統(tǒng)默認識別不了,可以通過軟件轉編碼來完成。這里以notepad++為例。

轉碼后保存,再次執(zhí)行1號腳本
結果為:

第三種,2號路徑中包含了空格
![]()
修改腳本

結果:

6.start
啟動單獨的“命令提示符”窗口來運行指定程序或命令。該命令包含有參數(shù),如下:
"title" 指定在“命令提示符”窗口標題欄中顯示的標題。
/dpatch 指定啟動目錄。
/i 將 Cmd.exe 啟動環(huán)境傳送到新的“命令提示符”窗口。
/min 啟動新的最小化窗口。
/max 啟動新的最大化窗口。
/separate 在單獨的內存空間啟動 16 位程序。
/shared 在共享的內存空間啟動 16 位程序。
/low 以空閑優(yōu)先級啟動應用程序。
/normal 以一般優(yōu)先級啟動應用程序。
/high 以高優(yōu)先級啟動應用程序。
/realtime 以實時優(yōu)先級啟動應用程序。
/abovenormal 以超出常規(guī)優(yōu)先級的方式啟動應用程序。
/belownormal 以低出常規(guī)優(yōu)先級的方式啟動應用程序。
/wait 啟動應用程序,并等待其結束。
/b 啟動應用程序時不必打開新的“命令提示符”窗口。除非應用程序啟用 CTRL+C,否則將忽略 CTRL+C 操作。使用 CTRL+BREAK 中斷應用程序。
如果不加參數(shù),則只開啟新的窗口來執(zhí)行命令。
例如:

結果:

如果需要修改新的窗口標題,則使用參數(shù)"標題"
例如:

結果

如果2號腳本路徑包含空格,則路徑需要加"路徑"
例如

結果

7.%0-%9
%0是指批處理文件的本身,%1-%9是傳入的參數(shù)。這個參數(shù)是從批處理外傳入的。
例如:

直接打開腳本顯示:

在命令行輸入:
![]()
輸出結果為

這里再補充一下擴展知識。
MDK 符號字解釋
KEY 例子 描述
% PROJECT1.UVPROJX 帶擴展名的文件名
# C:\MYPROJECT\PROJECT1.UVPROJX 帶擴展名的完整路徑和文件名
@ PROJECT1 沒有擴展名或路徑說明的文件名
$ C:\MYPROJECT\ 用反斜杠擴展的文件路徑名。
! .\SRC\TEST.C 具有當前文件夾擴展名和相對路徑規(guī)范的文件名
~ 1 123 當前光標位置的行號
^ 1 51 當前光標位置的列號
$D 從設備數(shù)據(jù)庫中選擇的設備名稱。
E 編輯器文件名目前在焦點。
F 根據(jù)上下文,這個文件代碼返回:在窗口Project中選擇的文件。 當前活動的編輯器文件。 當前由構建過程翻譯的文件.
H 應用程序HEX文件名 (PROJECT1.H86).
$J 編譯器的絕對路徑。 編譯器基本文件夾列在項目-管理-項目項目-文件夾/擴展- ARMCC文件夾。例如我自己的該參數(shù)的輸出結果就是D:\kei5\ARM\ARMCC\include
K 開發(fā)工具鏈的絕對根文件夾,不管使用的關鍵代碼是什么
L 鏈接器輸出文件。 通常用于調試的可執(zhí)行文件(PROJECT1).
$M CPU mask revision number.
P 當前項目文件名。
$S 當前激活的設備族包的安裝文件夾.
X 視覺可執(zhí)行程序文件(…\UV4\UV4. exe)。 適用于Key Code %, #, and @.
$X 目標-目標- XTAL選項中指定的以MHz為單位的XTAL時鐘頻率。
^X XTAL時鐘頻率在千赫指定的目標-目標- XTAL選項。
Y 預處理器符號文件co-arm_<target_name>.h為C文件類型定義。 適用于關鍵代碼#。
Z 預處理器符號文件co-arm_<target_name>.hpp為c++文件類型定義。 適用于關鍵代碼#。
$L $表示應用的是路徑,L表示Output->Name of Executable中設置的名字,即工程的輸出名(包含路徑)。
@L @表示引用的是文件名,@L引用工程的輸出名字。換句話說就是使用Keil,在Output中設置的文件輸出名字。
#L #表示引用的是本身,#L即工程的輸出文件。keil的輸出文件是.axf文件。如我自己的該參數(shù)的輸出結果就是D:\myproject\project\Objects\app.axf
實際fromelf.exe應該也要使用相對路徑,所以命令可以改成:
$KARM\ARMCC\bin\fromelf.exe --bin -o "$L@L.bin" "#L"
$K 表示的是MDK的安裝路徑。
10.choice
使用此命令可以讓用戶輸入一個字符,從而運行不同的命令。
輸入/?指令查看指令詳情

/c 添加自己的選項
/n 不顯示提示文本
需要注意的是/t和/d需要配合使用。/t倒計時幾秒。/d倒計時結束后的默認選項
例如

10秒倒計時結束后顯示

11.type
顯示文本文件的內容
先創(chuàng)建一個測試文本test.txt

調用腳本來顯示

結果為:

type 文件名 | more
有事顯示的內容過多,想要一行一行顯示時調用。


最下行會顯示more,任意鍵會再顯示一行
type 文件名 | find "關鍵字"
只輸出需要查找的關鍵字

結果為

12.set
該指令用來設置變量

不帶參數(shù)為設置變量。
例如
@echo off
echo hello world
set value=123456
echo 輸入的值為%value%
pause
執(zhí)行結果為:

set /p 變量=等待輸入的提示字
例如
@echo off
echo hello world
set /p value=請輸入值
echo 輸入的值為%value%
pause
結果:

set /a 變量=公式
例如:
@echo off
echo hello world
set /a value=1+2+3
echo 結果:%value%
pause
結果:

13.IF
用于判斷

if exist 文件名
查看該文件是否存在
例如
@echo off
echo hello world
if exist test1.txt (
echo this file exist
) else (
echo this file not exist)
pause
結果為

可以寫到一行,但是一定要注意空格,否則語法為失敗。

此外,如果換行,必須"括號"為行最后一個字符。否則無法執(zhí)行。
if "字符串"=="字符串"
判斷兩個字符串是否相等。
例如
@echo off
echo hello world
if "123"=="134" (
echo equality
) else (
echo not equality)
pause
結果:

if %變量%
可以通過與set /p指令配合來完成輸入數(shù)字的判斷。
例如:
@echo off
echo 1.輸出數(shù)字
echo 2.輸出字符
echo 3.輸出漢字
set /p value=請輸入
if %value%==1 (
echo 數(shù)字
) else if %value%==2 (
echo 字符
) else if %value%==3 (
echo 漢字) else (
echo 輸入錯誤)
pause
結果:

可以通過與choice /c指令配合來完成輸入數(shù)字的判斷。
例如:
@echo off
echo 1.輸出數(shù)字
echo 2.輸出字符
echo 3.輸出漢字
choice /c 123
if %errorlevel%==1 echo 數(shù)字
if %errorlevel%==2 echo 字符
if %errorlevel%==3 echo 漢字
pause?
結果:

字符串對比
@echo off echo hello world set /p value=請輸入字符串 if "%value%" == "true" (echo success )else (echo false) pause
結果如下:


/i 參數(shù):不區(qū)分大小寫,更改代碼
@echo off echo hello world set /p value=請輸入字符串 if /i "%value%" == "true" (echo success )else (echo false) pause
結果:

14.for
循環(huán)指令。這里需要了解兩個關鍵字%i、%%i
%i這個關鍵字不能在bat中使用。只能再CMD命令下的for中使用。
例如在cmd中:for %i in(command1) do command2
%%i是在bat的for中使用的指令。
例如for %%i in(command1) do command2
for %%i in(command1) do command2是for的語法使用規(guī)則。
1.for、in和do是for語句的關鍵字,它們三個缺一不可;
2.%%I是for語句中對形式變量的引用,即使變量l在do后的語句中沒有參與語句的執(zhí)行,也是必須出現(xiàn)的;
3.in之后,do之前的括號不能省略;
4.command1表示字符串或變量,command2表示字符串、變量或命令語句;
意思為:循環(huán)調用command1中的元素作為參數(shù),來參與command2的執(zhí)行
此外需要注意幾點
1.for語句的形式變量I,可以換成26個字母中的任意一個,這些字母會區(qū)分大小寫,也就是說,%%I和%%i會被認為不是同一個變量;形式變量I還可以換成其他的字符,但是,為了不與批處理中的%0~%9這10個形式變量發(fā)生沖突,請不要隨意把%%I替換為%%0~%%9中的任意一個;
2.in和do之間的command1表示的字符串或變量可以是一個,也可以是多個,每一個字符串或變量,我們稱之為一個元素,每個元素之間,用空格鍵、跳格鍵、逗號、分號或等號分隔;
3.for語句依次提取command1中的每一個元素,把它的值賦予形式變量I,帶到do后的command2中參與命令的執(zhí)行;并且每次只提取一個元素,然后執(zhí)行一次do后的命令語句,而無論這個元素是否被帶到command2中參與了command2的運行;當執(zhí)行完一次do后的語句之后,再提取command1中的下一個元素,再執(zhí)行一次command2,如此循環(huán),直到command1中的所有元素都已經被提取完畢,該for語句才宣告執(zhí)行結束。
例如:
@echo off echo hello world for %%a in (ele1 ele2 ele3) do (echo %%a) pause
結果:

for /l ....
該集表示以增量形式從開始到結束的一個數(shù)字序列。
例如:
@echo off for /l %%i in (1,1,20) do (echo %%i) pause
結果:

高級用法
搜索當前目錄下有哪些文件?
for %%i in (*.*) do echo "%%i"
搜索當前目錄下所有的文本文件?
for %%i in (*.txt) do echo "%%i"
15:goto
跳轉執(zhí)行標簽
在Bat中有標簽一詞,跟C語言的函數(shù)類似。并且標簽必須單獨一行,并且以冒號開頭。
這里做一個死循環(huán),如下:
@echo off :loop echo 1.輸出數(shù)字 echo 2.輸出字符 echo 3.輸出漢字 set /p value=請輸入 if %value%==1 ( echo 數(shù)字 ) else if %value%==2 ( echo 字符 ) else if %value%==3 ( echo 漢字) else ( echo 輸入錯誤) goto loop pause
結果

這樣在每次輸入結果后,就會回到起始,重新執(zhí)行。
16.符號(&、&&、||、|、>、>>)
& 順序執(zhí)行多條命令,而不管命令是否執(zhí)行成功
&& 順序執(zhí)行多條命令,當碰到執(zhí)行出錯的命令后將不執(zhí)行后面的命令
|| 順序執(zhí)行多條命令,當碰到執(zhí)行正確的命令后將不執(zhí)行后面的命令(即:只有前面命令執(zhí)行錯誤時才執(zhí)行后面命令)
| 管道命令 前一個命令的執(zhí)行結果輸出到后一個命令 如:help | more
> 清除文件中原有的內容后再寫入
>> 追加內容到文件末尾,而不會清除原有的內容主要將本來顯示在屏幕上的內容輸出到指定文件中指定文件如果不存在,則自動生成該文件
17.延遲環(huán)境變量擴展
CMD在解釋我們的命令的時候,首先會讀取命令行一條完整的命令。然后對其進行一些命令格式的匹配操作,看你所輸入的命令格式是不是符合他的要求。如果我們要在我們的命令中引用一些變量,那么我們如何讓CMD在解釋我們的命令時。能識別出這個變量呢?這時我們就可以在變量名字兩邊加一個%號, 如%name%。當CMD在對讀取我們的整行命令進行格式匹配的時候,就會發(fā)現(xiàn)name這個字符兩邊加了%號,就不會把他當作普通字符處理,而是會把他當 作一個變量處理。變量名叫name。然后CMD就會找到變量名對應的值,用變量名的值替換掉這個變量名字(name),(如果變量名不存在值,就返回空 值)。再將這個替換好并且匹配的命令執(zhí)行。這個替換值的過程就叫做變量擴展。說白了就是把變量的名字,用他的值給替換掉后執(zhí)行。也就是批處理如何識別一 個變量的過程.。
例如:
set var=test
echo %var%
此時編譯器再讀取的時候直接將%var%替換為test。所以顯示就顯示test。
在看下邊這個
for /l %%i in (1,1,5) do (
set var=%%i
echo %var%)
這個在預編譯的時候將%var%替換成%%i,但是%%i又不認識是什么,所以程序在運行的時候就會出錯。運行結果如下:

此時就需要使用延遲環(huán)境變量擴展,即每條指令在執(zhí)行之前才將變量進行替換,以保證對變量的任何修改都可以實時生效.。
使用setloacl ENABLEDELAYEDEXPANSION這個命令來啟用\"延遲環(huán)境變量擴展\",遇到的變量需要用!變量!進行替換。那上邊異常的代碼可以修改為:
setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (1,1,5) do (
set var=%%i
echo !var!)
執(zhí)行的結果為:

18.exit
退出當前DOS控制臺。
例如:
echo hello world
for /l %%a in (0,0,0) do (
set /p input=請輸入:
echo !input!
if !input!==pass (exit))
pause
結果:

只有輸入pass,程序才會退出。
到此這篇關于windows bat腳本學習一(基礎指令)的文章就介紹到這了,更多相關windows bat腳本內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

