詳細的批處理文件bat腳本命令

批處理文件的使用

在Linux系統下,批處理通過shell腳本完成,而在windows平臺下,批處理的文件後綴爲.bat。bat文件其實就是dos命令的集合
bat文件是dos下的批處理文件。批處理文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名爲 .bat 或 .cmd。在命令提示下輸入批處理文件的名稱,或者雙擊該批處理文件,系統就會調用cmd.exe按照該文件中各個命令出現的順序來逐個運行它們。使用批處理文件(也被稱爲批處理程序或腳本),可以簡化日常或重複性任務。入侵者常常通過批處理文件的編寫來實現多工具的組合入侵、自動入侵及結果提取等功能。
注意編輯bat文件請使用ANSI編碼(不然會出現中文亂碼)

bat腳本常用命令

1.echo命令
echo命令用於打開回顯(語句會在命令行中顯示)或關閉請求回顯功能(語句不會在命令行中顯示),也可用於顯示消息。如果沒有任何參數,echo命令將顯示當前回顯設置
echo的命令格式爲“echo [on/off]/[message]”。其中“/”代表選擇,“[]”表示類。這條命令的含義代表有3種輸出方式:echo on;echo off;echo [message]
echo on 打開回顯;直到出現echo off後纔會關閉回顯
echo off 關閉回顯;直到出現echo on後纔會打開回顯
echo message顯示消息
往往和@一起使用
[echo.命令]
換行命令,即echo後加一個點
[@命令]
@用於隱藏(@後面)當前命令行的文件路徑和命令。批處理文件執行時,在命令行窗口中會顯示當前正在運行的命令,爲了達到更好的隱蔽性,入侵者可以使用@命令隱藏
在這裏插入圖片描述
echo %CD% #代表當前目錄的字符串
echo %DATE% #當前日期
echo %TIME% #當前時間
@echo off //表示在此語句後,所有運行的命令都不顯示命令行本身,只顯示每一條命令的運行結果

2.goto命令
goto命令用於跳轉到標籤指定的位置並從標籤的下一行命令開始執行。命令格式爲“goto label”,其中label爲標籤。標籤的名字任意,但是最好是有意義的字母。在字母前需要加“:”號來表示這個字母是標籤。goto命令就是根據這個:來尋找下一步跳到那裏。最好有一些說明,這樣別人看起來纔會理解你的意圖。

@echo off
::使用冒號加標記名作爲goto語句的標記
:start
set /p param=
echo %param%
if %param%==4 echo 請不要輸入4& goto start
pause
if {%1}=={} goto noparms 
if {%2}=={} goto noparms(如果這裏的if%1%2你不明白的話,先跳過去,後面會有詳細的解釋。) 
:noparms 
echo Usage: monitor.bat ServerIP PortNumber 
goto end

3.rem命令
<1>註釋命令,可以回顯(語句會在命令行中顯示),在C語言中相當與/--------/,它並不會被執行,只是起一個註釋的作用 ,便於別人閱讀和你自己日後修改
格式:rem message
<2>::兩個冒號,效果同上,但不會回顯。(冒號後加任意非字母數字字符都可起到註釋作用)
在這裏插入圖片描述
4.>>,>與<,>&,<&與&,&&與|,||與^
(1)重定向(>>, > )
">>“與”>"都是輸出重定向命令,即把前面命令的流文字重定向寫入到一個文件中。二者的唯一區別是,>命令在清除掉原有文件中的內容後才把新的內容寫入原文件,而>>命令會另起一行把新的內容追加到原文件中。

追加內容:">>"在文末添加;">"覆蓋原內容

(2)重定向(<, >&, <&)

  1. “<”
    <,輸入重定向命令。即從文件中讀入命令輸入,而不是從鍵盤中讀入。
    echo 2005-05-01>temp.txt
    date <temp.txt

  2. “>&”, “<&”
    “>&”,將一個句柄的輸出寫入到另一個句柄的輸入中。
    “<&”,從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。
    常用句柄:0、1、2,未定義句柄:3—9
    1>nul 表示禁止輸出正確的信息
    2>nul 表示禁止輸出錯誤信息。
    其中1與2都是代表某個數據流輸入輸出的地址(NT CMD稱之爲句柄,MSDOS稱之爲設備)。
    句柄0:標準輸入stdin,鍵盤輸入
    句柄1:標準輸出stdout,輸出到命令提示符窗口(console,代碼爲CON)
    句柄2:標準錯誤stderr,輸出到命令提示符窗口(console,代碼爲CON)
    其中:stdin可被<重定向,stdout可被>、>>重定向。

(3)組合命令(&, &&, ||)
&,組合連接命令。即它可以連接n個DOS命令,然後按順序執行,並且會忽略執行失敗的命令。
語法:第一條命令 & 第二條命令 [& 第三條命令…]
顧名思義,就是可以把多個命令組合起來當一個命令來執行。這在批處理腳本里是允許的,而且用的非常廣泛。因爲批處理認行不認命令數目。這個符號允許在一行中使用2個以上不同的命令,當第一個命令執行失敗了,也不影響後邊的命令執行。這裏&兩邊的命令是順序執行的,從前往後執行。
比如:dir z:/ & dir y:/ & dir c:/
以上命令會連續顯示z,y,c盤的內容,不理會該盤是否存在

&&,組合連接命令。它可以把它前後兩個命令組合起來當一個命令來用。但是和&命令不同的是,&&會檢測是否有執行出錯的命令,一旦發現出錯後將不繼續執行剩下的命令。
語法:第一條命令 && 第二條命令 [&& 第三條命令…]
用這種方法可以同時執行多條命令,當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則一直執行完所有命令。這個命令和上邊的類似,但區別是,第一個命令失敗時,後邊的命令也不會執行。
比如:dir z:/ && dir y:/ && dir c:/

||,用法和&&幾乎一樣,但作用恰恰相反:當遇到一個執行正確的命令時,就退出此命令組合,不再繼續執行下面的命令。
語法:第一條命令 || 第二條命令 [|| 第三條命令…]
用這種方法可以同時執行多條命令,當一條命令失敗後才執行第二條命令,當碰到執行正確的命令後將不執行後面的命令,如果沒有出現正確的命令則一直執行完所有命令;
提示:組合命令和重定向命令一起使用必須注意優先級
管道命令( | )的優先級高於重定向命令(>,>>,<,>&,<&),重定向命令的優先級高於組合命令(&,&&,||)
問題:把C盤和D盤的文件和文件夾列出到a.txt文件中。看例:
dir c:/ && dir d:/ > a.txt
這樣執行後a.txt裏只有D盤的信息!爲什麼?因爲組合命令的優先級沒有重定向命令
的優先級高!所以這句在執行時將本行分成這兩部分:dir c:/和dir d:/ > a.txt,而並不是如你想的這兩部分:dir c:/ && dir d:/和> a.txt。要使用組合命令&&達到題目的要求,必須得這麼寫:dir c:/ > a.txt && dir d:/ >> a.txt
這樣,依據優先級高低,DOS將把這句話分成以下兩部分:dir c:/ > a.txt和dir d:/ >>
a.txt。當然這裏還可以利用&命令:dir c:/ > a.txt & dir d:/ >> a.txt
(4)|
|,作用是讓前一命令的輸出當做後一命令的輸入。
格式:第一條命令 | 第二條命令 [| 第三條命令…]
如:dir c:/|find “txt”
以上命令是:查找C:/所有,並發現TXT字符串。
FIND的功能請用 FIND /? 自行查看
(5)轉義字符(^)
^是對特殊符號<,>,&的前導字符,在命令中他將以上3個符號的特殊功能去掉,僅僅只把他們當成符號而不使用他們的特殊意義。
如:
echo test ^>1.txt
結果則是:test > 1.txt 。(他沒有追加在1.txt裏,只是顯示了出來)
另外,此轉義字符還可以用作續行符號。
舉個簡單的例子:
在這裏插入圖片描述
爲什麼轉義字符放在行尾可以起到續行符的作用呢?原因很簡單,因爲每行末尾還有一個看不見的符號,即回車符,轉義字符位於行尾時就讓回車符失效了,從而起到了續行的作用。
(6)其它特殊標記符
CR(0D) 命令行結束符
Escape(1B) ANSI轉義字符引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY命令文件連接符
* ? 文件通配符
/ 參數開關引導符
: 批處理標籤引導符
5.設置標題、查看返回碼errorlevel

@echo off
::title設置標題
title 我測試一下!
::用以判斷上一條命令是否執行成功,默認爲0,出錯爲1
echo %errorlevel%
if %errorlevel% == 0 echo 沒問題
pause

在這裏插入圖片描述
6.設置顏色
color設置控制檯前景和背景顏色。具體可以在cmd下用“color /?”查詢。顏色屬性由兩個十六進制數字指定,第一個數字表示背景色,第二個數字表示文字顯示的顏色。
例:color 0A
在這裏插入圖片描述
7.call命令
用於在一個批處理程序中調用另一個批處理程序,此調用過程中只是暫時掛起父批處理程序,當子批處理程序運行完畢後會返回父批處理程序繼續執行
常用的命令格式爲“call [path] filename”,其中path是要調用的批處理文件的位置,可選,默認是與父批處理程序在同一目錄下;filename用於指定子批處理程序的文件名,其必須包含有.cmd或.bat擴展名
::該文件名爲test.bat

@echo off
echo 這是主程序第一個輸出
timeout 2
call test1.bat param1 param2
timeout 2
echo 這是主程序第二個輸出
pause
::該文件名爲test1.bat
@echo off
timeout 1
echo 這是子程序第一個輸出
echo 這是接收到的第一個參數%1 和第二個參數%2
pause

8.set命令
set,顯示、設置或刪除變量。有三種基本格式:
1.set 顯示環境變量
如:在命令行下輸入:
set 會顯示當前所有的系統環境變量
set c 會顯示所有的以c開頭或C開頭的變量(也即不區分大小寫);
set com 會顯示所有的以com開頭或COM開頭的變量(不區分大小寫);
2.set 設置環境變量
set [variable=[string]];
如:set str=ok
2.帶參數 /a的set 數值計算
set /a 表達式;
/a 命令行開關指定等號右邊的字符串爲被評估的數字表達式。
set的/A參數就是讓SET可以支持數學符號進行加減等一些數學運算!

@echo off
set /p num=請輸入一個數字(不要超過2147483647):
REM 批處理能處理的數字不能超過32(二進制)
set /a num*=2
echo 這個數字的兩倍是%num%
pause>nul
set /a var+=1 這樣的語法對應原始語法就是set /a var = %var% + 1

3. 帶參數 /p 的set 等待用戶輸入
set /p variable=[promptString](=號右邊的promptString是提示語,不是變量的值)。
等待用戶輸入數據(開關/P)

@echo off
set /p param=請輸入密碼:
echo %param%
pause
@echo off
set /p str=<%0
echo %str%
pause

運行顯示批處理文件自身的第一行:@echo off

9.if語句
if表示將判斷是否符合規定的條件,從而決定執行不同的命令。有三種格式:
1.if“參數” == “字符串” 待執行的命令
參數如果等於指定的字符串,則條件成立,運行命令,否則運行下一句。(注意是兩個等號)
if "%1"“a” format a:
if {%1}
{} goto noparms
if {%2}=={} goto noparms
2. if exist 文件名 待執行的命令
如果有指定的文件,則條件成立,運行命令,否則運行下一句。
if exist config.sys edit config.sys
if errorlevel / if not errorlevel 數字 待執行的命令
如果返回碼等於指定的數字,則條件成立,運行命令,否則運行下一句。
if errorlevel 2 goto x2

@echo off
set a=123
set b=abc
set c=12
::/i字符串大小寫忽略
if /i %b% equ ABC (
  if %a% geq %c% (
    echo %a%^>=%c%
  ) else (
    echo %a%^<%c%
  )
) else (
  echo %b%不等於ABC
)
pause>nul

如上的操作數可以是字符串、數值、變量;當參與比較的字符串是字符串時,將被轉換爲對於的ASCII碼進行比較;比較運算符有如下:
在這裏插入圖片描述
10.start命令
調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用
注意:執行start時將開啓一個新線程來執行該程序,原程序不受影響繼續執行

@echo off
::打開test.txt文件
start e:\test.txt
::啓動jar包
start java -jar e:\demo.jar
pause
::打開百度
start iexplore http://www.baidu.com

11.變量%0--%9
%0指該文件本身,%1–%9爲接收到的參數,如下例子中,子程序的%1即爲主程序傳輸的param1,%2即爲param2

::該文件名爲test.bat
@echo off
echo 這是主程序第一個輸出
timeout 2
start test1.bat param1 param2
timeout 2
echo 這是主程序第二個輸出
pause
::該文件名爲test1.bat
@echo off
timeout 2
echo 這是子程序第一個輸出
echo 這是接收到的第一個參數%1 和第二個參數%2
pause

12.切換目錄

::@echo off
::顯示當前目錄
cd
::切換到根目錄
cd\
::盤符加冒號,切換到該盤
d:
::切換到e:hi目錄下(目錄名不區分大小寫)
cd /d e:\hi
::保存當前目錄,並切換當前目錄爲d:\test
pushd d:\test
::恢復當前目錄爲剛纔保存的e:\hi
popd
pause

13.md命令創建文件夾
make directory的縮寫(創建目錄)。例子如下:

::創建文件夾
md e:\test\test1
::文件夾名有空格需要加引號
md "e:\test op"
::空格隔開,創建多個
md e:\test1 e:\test9\test2 "e:\test5 lmn"

14.rd命令刪除文件夾
remove directory的縮寫(刪除目錄)。例子如下:

@echo off
::刪除e:\test9空文件夾,不爲空不能刪除
rd "e:\test op"
::刪除e:\test9下所有文件夾,不管是否爲空,但會詢問是否確認刪除[Y/N]
rd /s e:\test9
::自定義刪除提示信息
echo 是否刪除[Y/N]: & rd /s e:\test9>nul
::/s/q聯合使用,不會詢問直接刪除
rd /s/q e:\test9

15.move命令移動文件(夾)

@echo off
::文件夾移動,如果test文件夾存在,則將test5文件夾移動到test文件夾下
::如果test文件夾不存在,則將test5文件夾移動到test1文件夾下並重命名爲test
::注意:文件夾移動不能跨分區
move e:\test5 e:\test1\test
::將d:\test\1.txt文件移動到e:\下並重命名爲23.txt
::如果該目錄已存在23.txt,則會覆蓋
move d:\test\1.txt e:\23.txt>nul&&echo 移動成功並重命名
::將e:\23.txt文件移動到e:\test文件夾下
move e:\23.txt e:\test>nul&&echo 移動到文件夾下

16.del命令刪除文件
delete的縮寫(刪除)。用於刪除指定磁盤、目錄中的一個或一組文件。

@echo off
::刪除該層目錄下的所有文件,需要確認[Y/N]
del d:\test
pause
::不需要確認
del /q d:\test
::刪除該目錄下所有層級的文件,不刪除文件夾,需要逐個文件夾確認
del /s d:\test
::刪除文件111.png,不需要確認
del d:\test\111.png

17.cope命令複製文件

@echo off
::將d:\test\test.txt複製到e:\test1\目錄下並重命名爲test2.txt
::如果test2.txt文件已存在,將自動覆蓋
copy d:\test\test.txt e:\test1\test2.txt
::將e:\test該層目錄下所有文件複製到d:\test1\test3文件夾下
::前提d:\test1\test3文件夾必須已存在
::相同文件名的文件會被覆蓋
copy e:\test d:\test1\test3

18.xcope命令複製文件

@echo off
::將e:\test目錄下所有文件()複製到d:\test1
::/e目錄下所有文件(),/y已存在時直接覆蓋
xcopy e:\test d:\test1 /e/y

19.cope命令合併文件

@echo off
cd /d d:\test
::129.txt和156.txt兩個文件內容合併存入新建的new.txt中
copy 129.txt+156.txt new.txt
::打印出new.txt中的內容
type new.txt
::將d:\mp3\111.mp3和e:\2.mp3以二進制數據合併複製到d:\new.mp3
::其中/b二進制,/a文本形式
copy /b d:\mp3\111.mp3+e:\2.mp3 d:\new.mp3

20.ren命令重命名文件(夾)
rename的縮寫(重新命名)。用於對指定磁盤、目錄中的一個文件或一組文件更改名稱。
[格式] ren [C:][path]filename1[.ext] filename2[.ext]

@echo off
::1.txt重命名爲58.bat
ren d:\test\1.txt 58.bat
::將d:\test\目錄下所有文件名爲1開頭的txt文件改爲bat文件
ren d:\test\1*.txt *.bat
::將d:\test\目錄下所有文件名爲1開頭三個字符的bat改爲txt文件
ren d:\test\1??.bat ???.txt

21.timeout延遲

@echo off
set a=1
:start
echo %a%&set /a a=a+1
timeout 1 > nul
goto start
pause
@echo off
::每隔一秒輸出斐波拉契數列
set a=1
set b=1
echo %a%&timeout 1 >nul
echo %b%&timeout 1 >nul
:start
set /a c=a+b
echo %c%&set a=%b%&set b=%c%
timeout 1 > nul
goto start
pause

22.調用彈框

::一、MSG命令方式
@echo off
::/time:5設置時間彈框的顯示時間爲5S,5S後自動關閉
msg * /time:5 這裏是彈窗顯示的文本
pause
::設置彈窗的多行文本
(echo 這是彈窗的第一行文本
echo 這是第二行文本)|msg * /time:5
pause
::一、調用VBScript的MsgBox實現彈窗
@echo off
::第二個參數65的解釋在代碼之後的列表中
mshta vbscript:msgbox("彈窗單行顯示內容",65,"彈窗的標題")(window.close)
::多行顯示文本可在文本中使用vbCrLf或vbNewLine
set msg="多行顯示vbCrLf這是第二行vbNewLine這是第三行"
mshta vbscript:msgbox(Replace(Replace(%msg%,"vbCrLf",vbCrLf),"vbNewLine",vbNewLine),6,"自定義標題")(window.close)

MsgBox的button參數取值如下:
0 = vbOKOnly - 只顯示確定按鈕。
1 = vbOKCancel - 顯示確定和取消按鈕。
2 = vbAbortRetryIgnore - 顯示放棄、重試和忽略按鈕。
3 = vbYesNoCancel - 顯示是、否和取消按鈕。
4 = vbYesNo - 顯示是和否按鈕。
5 = vbRetryCancel - 顯示重試和取消按鈕。
16 = vbCritical - 顯示臨界信息圖標。
32 = vbQuestion - 顯示警告查詢圖標。
48 = vbExclamation - 顯示警告消息圖標。
64 = vbInformation - 顯示信息消息圖標。
0 = vbDefaultButton1 - 第一個按鈕爲默認按鈕。
256 = vbDefaultButton2 - 第二個按鈕爲默認按鈕。
512 = vbDefaultButton3 - 第三個按鈕爲默認按鈕。
768 = vbDefaultButton4 - 第四個按鈕爲默認按鈕。
0 = vbApplicationModal-應用程序模式,用戶必須響應消息框才能繼續在當前應用程序中工作。
4096 = vbSystemModal - 系統模式:在用戶響應消息框前,所有應用程序都被掛起。
注意:
第一組值 (0 - 5) 用於描述對話框中顯示的按鈕類型與數目;
第二組值 (16, 32, 48, 64) 用於描述圖標的樣式;
第三組值 (0, 256, 512) 用於確定默認按鈕;
第四組值 (0, 4096) 則決定消息框的樣式。在將這些數字相加以生成 buttons 參數值時,只能從每組值中取用一個數字。
23.獲得管理員權限
嘗試以下兩種方式

@ echo off
%1 %2
ver|find "5.">nul&&goto :Admin
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :Admin","","runas",1)(window.close)&goto :eof
:Admin
::上面這段代碼之後執行的所有東西都是管理員權限方式
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\
config\system"
if '%errorlevel%' NEQ '0' (
	echo 請求管理員權限...
	goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
echo 獲得管理員權限
pause

24.for語句
for命令是一個比較複雜的命令,主要用於參數在指定的範圍內循環執行命令。在批處理文件中使用for命令時,指定變量請使用 %%variable。其實也就和高級程序語言中的for大同小異,其語法如下:
for %%variable IN (set) DO command [command-parameters]
%%variable:指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。(*.bat *.txt)
Command:指定對每個文件執行的命令。
command-parameters:爲特定命令指定參數或命令行開關。

@echo off
::按行讀取d:\test.txt文件中的內容,輸出每行的第一個數據,默認每行內以空格和tab爲分隔符
for /f %%i in (d:\test.txt) do echo %%i
::delims參數指定分隔符爲/
for /f "delims=/" %%i in (d:\test.txt) do echo %%i
::tokens參數指定讀取第二列,tokens=*讀取所有
for /f "tokens=2 delims=/" %%i in (d:\test.txt) do echo %%i
::skip參數直接跳過前兩行,從第三行開始
::tokens=2,*讀取第二個和之後剩餘所有,%%i爲第一列值,%%j爲之後剩餘所有
::tokens=1,4讀取第一個和第四個,%%i爲第一列值,%%j爲第四列值
::('net start')表示將單引號內語句的執行結果作爲集合
for /f "skip=2 tokens=1,* delims=/" %%i in ('net start') do echo %%i %%j
::("asc/2ap/as5")表示對字符串進行處理
for /f "tokens=2,* delims=/" %%i in ("asc/2ap/as5") do echo %%i--%%j
::eol參數直接忽略以#開頭的行
for /f "eol=# tokens=*" %%i in (d:\test.txt) do echo %%i
@echo off
for %%t in (*.bat *.txt) do type %%t   

注意1,打印的是bat和txt文件的內容
注意2,此bat放在需打印文件內容的文件一個目錄層級下
25.sc和net命令

@echo off
::關閉/啓動MySQL服務,執行該條語句後會立即執行之後的代碼,不會等待停止/啓動的過程
sc stop MySQL
sc start MySQL
::設置MySQL服務爲自啓動,demand手動,disabled禁用
sc config MySQL start= auto
::安裝服務
sc create MySQL binPath= "F:\installFiles\mysql-5.7.1.exe"
::卸載服務(卸載前先關閉服務)
sc delete MySQL
::關閉/啓動MySQL服務,等待停止/啓動的過程,完成後執行之後的代碼
net start MySQL
net stop MySQL
::查看所有運行的服務
net start

26.ping命令

@echo off
ping 192.168.0.225
::無休止ping某地址
ping www.baidu.com -t

27.mshta命令

::可以調用vb腳本和js腳本
mshta vbscript:window.execScript("alert('hello world!');","javascript")(window.close)
mshta javascript:window.execScript("msgBox('hello world!')(window.close)","vbs")
mshta vbscript:msgbox("彈窗單行顯示內容",65,"彈窗的標題")(window.close)
mshta vbscript:CreateObject("Wscript.Shell").popup("彈窗內容",7,"標題",64)(window.close)
::連續彈二個信息框
mshta vbscript:execute("msgbox ""one BOX"":msgbox ""two BOX"":window.close")

28.choice
choice 使用此命令可以讓用戶輸入一個字符(用於選擇),從而根據用戶的選擇返回不同的errorlevel,然後於if errorlevel配合,根據用戶的選擇運行不同的命令。
注意:choice命令爲DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。
choice參數列表:
/C choices指定要創建的選項列表。默認列表是 “YN”。
/N 在提示符中隱藏選項列表。提示前面的消息得到顯示,選項依舊處於啓用狀態。
/CS 允許選擇分大小寫的選項。在默認情況下,這個工具是不分大小寫的。
/T timeout做出默認選擇之前,暫停的秒數可接受的值是從0到9999。如果指定了0,就不會有暫停,默認選項會得到選擇。
/D choice在nnnn秒之後指定默認選項。字符必須在用 /C選項指定的一組選擇中;同時,必須用/T指定 nnnn。
/M text指定提示之前要顯示的消息。如果沒有指定,工具只顯示提示。
/? 顯示幫助消息。

choice /C YNC /M "確認請按Y,否請按N,或者取消請按C。"
choice /T 10 /C ync /CS /D y
choice /C ab /M "選項1請選擇a,選項2請選擇 b。"
choice /C ab /N /M "選項1請選擇a,選項2請選擇b。
choice /C 123 /M "RUN1,RUN2,RUN3"

29.%與%var%
%:調用程序外部參數%1至%9
%var%:引用變量var
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %爲命令行傳遞給批處理的參數
%0 批處理文件本身,包括完整的路徑和擴展名
%1 第一個參數
%9 第九個參數
%
從第一個參數開始的所有參數
參數%0具有特殊的功能,可以調用批處理自身,以達到批處理本身循環的目的,也可以複製文件自身等等。
例:最簡單的複製文件自身的方法

copy %0 d:/wind.bat

%註釋內容%(可以用作行內註釋,不能出現重定向符號和管道符號)
30.pause
(1) pause,暫停命令。運行時,將顯示下面的文字: Press any key to continue. . .(或者:請按任意鍵繼續. . .)
(2) pause > nul的作用是同樣的,區別是不顯示“請按任意鍵繼續. . .”
31.type
type,文本輸出命令。
%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數字符串用%1到%9順序表示。
現在有一批處理文件t.bat在C盤根目錄下,內容如下:

@echo off
type %1
type %2
pause

命令行輸入C:/>t a.txt b.txt 運行,%1就表示a.txt,%2就表示b.txt,其他參數順延
32.at
at,列出在指定的時間和日期在計算機上運行的已計劃命令或計劃命令和程序,例如at 12:00 “d:\abc.bat”。
33.net time命令
使計算機的時鐘與另一臺計算機或域的時間同步。
語法:net time [\ComputerName | /domain[:DomainName] | /rtsdomain[:DomainName]]
   [/set] [\ComputerName] /querysntp [\ComputerName] /setsntp[:NTP Server List]
參數:\ComputerName指定要檢查或要與之同步的服務器的名稱。
   /domain[ :DomainName]指定要同步時鐘的域。
   /rtsdomain[:domainname]指定要與之同步時鐘的“可信時間服務器”所在的域。
   /set使計算機的時鐘與指定的計算機或域的時間同步。
   /querysntp顯示當前爲本地計算機或 ComputervNname 所指定的計算機配置的網絡時間協議 (NTP) 服務器的名稱。
   /setsntp[:NTPServerList]指定本地計算機所使用的 NTP 時間服務器的列表。該列表可以包含 IP地址或 DNS名稱,
   並用空格分開。如果使用多個時間服務器,則必須使用引號引住該列表。
【備註】使用/set參數時可以直接在後面加上/y或/yes參數實現不詢問直接更改時間:
net time \ComputerName /set /y
34.字符串替換與截取
【字符串替換】
%var:str1=str2%
上面語法的意思就是:將字符串變量%var%中的str1替換爲str2
【字符串截取】:%a:~[m[,n]]%
%a:~0,n% 取左邊n位
%a:~-m% 取右邊m位
%a:~m,n% 從m+1位開始取n位
%a:~m,-n% 從m+1位開始,至倒數n+1位
%a:~m % 從m+1位開始取右邊全部。

35.,/;/()/!/""字符串界定符
逗號相當於空格,在某些情況下“,”可以用來當做空格使
比如: dir,c:/
分號,當命令相同時,可以將不同目標用;來隔離,但執行效果不變,如執行過程中發生錯誤,則只返回錯誤報告,但程序仍會執行。
比如:

dir c:/;d:/;e:/;z:/ 
::以上命令相當於
dir c:/
dir d:/
dir e:/
dir f:/

如果其中z盤不存在,運行顯示:系統找不到指定的路徑。然後終止命令的執行。

dir c:/;d:/;e:/1.txt
::以上命令相當於
dir c:/
dir d:/
dir e:/1.txt

其中文件e:/1.txt不存在,但e盤存在,有錯誤提示,但命令仍會執行。
爲什麼?如果目標路徑不存在,則終止執行;如果路徑存在,僅文件不存在,則繼續執行。
小括號在批處理編程中有特殊的作用,左右括號必須成對使用,括號中可以包括多行命令,這些命令將被看成一個整體,視爲一條命令行。括號在for語句和if語句中常見,用來嵌套使用循環或條件語句,其實括號()也可以單獨使用。

echo 1 & echo 2 & echo 3
::以上命令相當於
(
echo 1
echo 2
echo 3
)

上面兩種寫法效果一樣,這兩種寫法都被視爲是一條命令行。
注意:這種多條命令被視爲一條命令行時,如果其中有變量,就涉及到變量延遲的問題。
感嘆號在變量延遲問題中,用來表示變量,即%var%應該表示爲!var!,請看前面的setlocal命令介紹。對於這樣的"邏輯或取餘操作符",我們需要把他們用雙引號引起來,也可以用轉義字符^
set /a var= 1 “&” 1 這樣結果就顯示出來了,其他邏輯或取餘操作符用法
set /a var= 1 “+” 1 異運算
set /a var= 1 “%” 1 取模運算
set /a var= 3 “<<” 2 左移位運算, 3的二進制爲11,左移2位爲1100,換成十進制就是12,自行驗證
set /a var= 4 “>>” 2右移位運算,4的二進制爲100,右移動2位爲1,結果爲1
雙引號允許在字符串中包含空格,進入一個特殊目錄可以用如下方法
cd “program files”
cd progra~1
cd pro*
以上三種方法都可以進入program files這個目錄
36.註釋語句
<1>:: 註釋內容 //不能出現重定向符號和管道符號
<2>: 註釋內容 //註釋文本不能與已有標籤重名可以用作標籤下方段的執行內容
<3>rem 註釋內容
<4>%註釋內容% //可以用作行間註釋,不能出現重定向符號和管道符
<5> goto st //可以用作說明goto的條件和執行內容
註釋內容
:st
<6> echo 註釋內容 > nul //不能出現重定向符號和管道符號
<7> if not exist nul 註釋內容 //不能出現重定向符號和管道符號
<8> :標籤 註釋內容 //可以用作標籤下方段的執行內容
37.pause、cmd、@cmd.exe
掛起命令,當批處理文件運行到pause命令時,會出現“請按任意鍵繼續…”的提示
運行pause 命令時,將顯示下面的消息:Press any key to continue. . .
bat文件執行不立即消失的三種方法
<1>可以在程序的結尾加上:pause
注:此時我們可以看到dos窗口沒有消失,但是如果點擊鍵盤任意按鍵,dos還是會消失。此時,pause只是間隔停頓作用。
<2>可以在程序的末尾添加cmd
注:該bat文件同目錄下最好不要有cmd命名的bat文件。此時程序運行結束後,可以看到結尾顯示了dos的版本,並且可以繼續輸入指令。
<3>結尾輸入@cmd.exe
注:這種方法的好處是不懼怕同目錄下的cmd 爲名的bat文件。執行bat後,結果和cmd方法是一樣的,並且也可以繼續輸入指令;

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