bat腳本基本命令和格式


bat腳本

--莫非

BAT腳本與shell腳本區別

Shell腳本使用Linux/Unix下的命令,一般文件開頭以#號來告訴系統這個腳本需要什么解釋器來執行如:#!/bin/bash采用bash而不是dash來執行。而bat文件是dos下的批處理文件。批處理文件是無格式的文本文件,它包含一條或多條命令,它的文件擴展名為.bat 或.cmd。

常用命令1where、cls、title、color、mode con

Where

顯示符合搜索模式的文件位置 Where \R C:\ *.dll        \F \T

Cls:清屏

Title

設置控制台BAT的標題

Color

設置bat顯示的背景和前景色:color 02 (背景黑色,字符綠色)

MODE CON

設置bat的設置窗體大小:MODE CON COLS=200 LINES=1000

常用命令2:@、echo、::、rem、pause、:和goto、%以及if

@

@的作用就是讓腳本在執行時不顯示命令部分:@echo off

echo

echo命令的另一種用法:可以用它來顯示信息:echo Edit by CODERED

echo命令的另一種用法二:可以直接編輯文本文件:echo nbtstat -A 192.168.0.1 > a.bat

::rem

::rem是注釋命令:  ::close echo

rem不同的是,::后的字符行在執行時不會回顯無論是否用echo on打開命令行回顯狀態,另外,rem 可以用於config.sys文件中.

pause

pause是暫停命令:pause

:goto

goto是個跳轉命令,是一個標簽,當程序運行到goto時,將自動跳轉到:定義的部分去執行了:

……

goto end

……

:end

%

%批處理變量引導符為命令行傳遞給批處理的參數(多個%一起使用的情況除外,以后還將詳細介紹):

set p=abcdefg & echo %p:~3,2%

If

輸入判斷if "%1"=="" goto usage

存在判斷:

if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif

結果判斷: if errorlevel 1 pause & edit %1.asm

常用命令3:call、find、for、set、shift

Call

call命令用來從一個批處理腳本中調用另一個批處理腳本:

echo %1 This is a call example.

call a.bat

find

find用來在文件中搜索特定字符串,通常也作為條件判斷的鋪墊程序:

type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"

shift

改變傳入的參數偏移量,如%3移位到%2,將%4移位到%3,等等;並且不影響%0%1

SHIFT /2

Set

顯示、設置或刪除cmd.exe環境變量。

    • Set path=D:\
    • Set /p input=請輸入: & echo 你輸入的是:%input%
    • setlocal enabledelayedexpansion

Set /p input=請輸入: & echo 你輸入的是:!input!

For

基本格式:

FOR %%variable IN (set) DO command [command-parameters]

/D參數(匹配目錄):

for /d %%i in (c:\*) do echo %%i

/R參數(匹配文件)

for /r [c:\] %%i in (???.exe) do if exist %%i echo %%i

/L參數(該集表示以增量形式從開始到結束的一個數字序列)

for /l %%i in (1,1,5) do @echo %%i

/F參數

使用文件解析來處理命令輸出、字符串及文件內容。使用迭代變量定義要檢查的內容或字符串,並使用各種options選項進一步修改解析方式。默認情況下,/F 傳遞每個文件每一行的第一個空白分隔符號。跳過空行。

for /f "[eol=skip=1] delims=" %%i in ('net user') do @echo %%i

管道命令 |、>、>>、>、>&、<&

|

|命令的作用,就是讓前一命令的輸出當做后一命令的輸入:

help | moreipconfig /all | find IPv4

>

>會清除掉原有文件中的內容后把新的內容寫入原文件echo @echo off > a.bat

>>

>>只會另起一行追加新的內容到原文件中,而不會改動其中的原有內容:

echo exit >> a.bat

<

<是輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入

>&

>&將一個句柄的輸出寫入到另一個句柄的輸入中

<&

<&剛好和>&相反,從一個句柄讀取輸入並將其寫入到另一個句柄輸出中

組合命令:&、&&、||

組合命令,顧名思義,就是可以把多個命令組合起來當一個命令來執行,那么這多個命令就要用這些組合命令連接起來放在同一行,因為批處理認行不認命令數目

&

&命令作用是用來連接nDOS命令,並把這些命令按順序執行,而不管是否有命令執行失敗:

copy a.txt b.txt /y & del a.txt

&&

&&可以把它前后兩個命令組合起來當一個命令來用,一旦發現有命令出錯將不繼續執行剩下的命令:

dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www

if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www

dir c:\ && dir d:\ > a.txt

不到預期結果必須:

dir c:\ > a.txt && dir d:\ >> a.txt

||

||命令執行正確就退出此命令組合,不再執行剩下的命令:

dir s*.exe || echo Didn't exist file s*.exe & pause & exit

 

其他符號:,、;、””、()、!

;

分號,當命令相同時,可以將不同目標用;來隔離,但執行效果不變,如執行過程中發生錯誤,則只返回錯誤報告,但程序仍會執行。

dir c:\;d:\;e:\;z:\ > 1.txt

逗號相當於空格,在某些情況下“,”可以用來當做空格使用:

dir,C:\

“”

雙引號允許在字符串中包含空格:

cd,"C:\ program files"

()

小括號在批處理編程中有特殊的作用,左右括號必須成對使用,括號中可以包括多行命令,這些命令將被看成一個整體,視為一條命令行。

(echo a && echo bb) > 1.txt

!

在變量延遲問題中,用來表示變量,即%var%應該表示為!var!

Set /p input=請輸入: & echo 你輸入的是:!input!

if…else…條件語句

DOS條件語句主要有以下形式

IF [NOT] ERRORLEVEL number command

IF [NOT] string1==string2 command

IF [NOT] EXIST filename command

增強用法:IF [/I] string1 compare-op string2 command

增強用法中加上/I就不區分大小寫了!

增強用法中還有一些用來判斷數字的符號:

EQU - 等於

NEQ - 不等於

LSS - 小於

LEQ - 小於或等於

GTR - 大於

GEQ - 大於或等於

上面的command命令都可以用小括號來使用多條命令的組合,包括else子句,組合命令中可以嵌套使用條件或循環命令。

IF EXIST filename (

del filename

) ELSE (

echo filename missing

)

循環語句

指定次數循環

FOR /L %variable IN (start,step,end) DO command [command-parameters]

組合命令:

FOR /L %variable IN (start,step,end) DO (

Command1

Command2

……

)

對某集合執行循環語句。

FOR %%variable IN (set) DO command [command-parameters]

%%variable
指定一個單一字母可替換的參數。

(set)
指定一個或一組文件。可以使用通配符。

command
對每個文件執行的命令,可用小括號使用多條命令組合。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

同前面一樣,command可以用括號來組合:

FOR /R [[drive:]path] %variable IN (set) DO (

Command1

Command2

……

commandn

)

條件循環

上面的循環結構是用for命令來實現的,for命令循環有一個缺點,就是整個循環被當作一條命令語句,涉及到變量延遲的問題。

利用goto語句和if條件判斷,dos可以實現條件循環:

@echo off

set var=0

rem ************循環開始了

:continue

set /a var+=1

echo 第%var%次循環

if %var% lss 100 goto continue

rem ************循環結束了

echo 循環執行完畢

pause

子程序

在批處理程序中可以調用外部可運行程序,比如exe程序,也可調用其他批處理程序,批處理可以調用本程序中的一個程序段,相當於子程序,這些子程序一般放在主程序后面。

子程序調用格式:

CALL :label arguments

子程序語法:

:label

command1

command2

......

commandn

goto :eof

在子程序段中,參數%0指標簽:label

子過程一般放在最后,並且注意在主程序最后要加上exit或跳轉語句,避免錯誤的進入子過程。

子程序和主程序中的變量都是全局變量,其作用范圍都是整個批處理程序。

傳至子程序的參數在call語句中指定,在子程序中用%1、%2至%9的形式調用,而子程序返回主程序的數據只需在調用結束后直接引用就可以了,當然也可以指定返回變量。

打印你好:

@echo off

call :sub return

echo 子程序返回值:%return%

pause

goto :eof

:sub

set %1=你好

goto :eof

設計一個求多個整數相加的子程序

@echo off

set sum=0

call :sub 10 20 35 40 50

echo 數據求和結果:%sum%

pause

goto :eof

:sub

rem 參數1為返回變量名稱

set /a sum+=%1

shift /1

if not "%1"=="" goto sub

goto :eof

運行結果:155

變量嵌套與命令嵌套

和其它編程語言相比,dos功能顯得相對簡單,要實現比較復雜的功能,需要充分運用各種技巧,變量嵌套與命令嵌套就是此類技巧之一。

簡單的說,命令嵌套首先用一條dos命令生成一個字符串,而這個字符串是另一條dos命令,用call語句調用字符串將其執行,從而得到最終結果。

用call語句實現命令嵌套:

@echo off

set str1=aaa echo ok bbb

echo 初始字符串:%str1%

echo 生成命令字符串如下:

echo %str1:~4,7%

echo 運行命令字符串生成最終結果為:

call %str1:~4,7%

pause


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM