批處理之IF語句

2021-09-30 15:42:13 字數 4936 閱讀 3274

在批處理程式中執行條件處理。如果if命令中指定的條件為真,windows 將執行該條件後的命令。如果條件為假,windows 將忽略if子句中的命令,並執行else子句中的任何命令(如果已經指定了命令)。

if[not]errorlevelnumber command [elseexpression]

if[not] string1==string2 command [elseexpression]

if[not]existfilename command [elseexpression]

啟用了命令擴充套件:

if[/i] string1 compare-op string2 command [elseexpression]

if cmdextversionnumber command [elseexpression]

if definedvariable command [elseexpression]

引數

not

指定只有當條件為假時 windows 才能執行該命令。

errorlevelnumber

只有當前乙個程式返回大於或等於 number 的退出**時,才能指定真條件。

command

指定在符合前面的條件時 windows 將執行的命令。

string1==string2

只有當 string1 和 string2 相同時才能指定真條件。這些值可以是文字字串或批處理變數(例如,%1)。文字字串不需要引號。

existfilename

如果 filename 存在,則指定真條件。

compare-op

以下三字母比較操作符中的乙個:

操作符 說明 equ 等於 neq 不等於 lss 少於 leq 少於或等於 gtr 大於 geq 大於或等於

/i

指定/i開關時,將強制字串比較按忽略大小寫情況進行。/i開關也可以用於if的 string1==string2 格式。這些比較是通用的,如果 string1 和 string2 都由所有的數字組成,那麼字串將被轉換為數字並且將執行數字比較。

cmdextversionnumber

cmdextversion條件的作用就像是 errorlevel,但它需要與 cmd.exe 的「命令擴充套件」功能相關聯的內部版本號比較。第一版是 1,當重大的增強新增到命令擴充套件中時,版本號將增加 1。當禁用命令擴充套件時,cmdextversion條件不會為真。

definedvariable

defined條件的作用就象是exist,但它使用環境變數名,並且如果環境變數已經定義它將返回真值。使用該條件新增三個變數:%errorlevel%,%cmdcmdline%%cmdextversion%

%errorlevel%擴充套件到 errorlevel 當前值的字串表示式,如果沒有名為 errorlevel 的環境變數,在這種情況下可取代它的值。程式執行後,下面的**errorlevel使用:

goto answer%erorlevel% :answer0 echo program had return code 0 :answer1 echo program had return code 1

也可以在 compare-op 中使用上面列出的比較操作符:

if %errorlevel% leq 1 goto okay

%cmdcmdline%在任何 cmd.exe 處理之前擴充套件傳遞到 cmd.exe 的源命令列,如果沒有名為cmdcmdline的環境變數,在這種情況下可取代它的值。

%cmdextversion%擴充套件到cmdextversion當前值的字串表示式,如果沒有名為 cmdextversion 的環境變數,在這種情況下可取代它的值。

expression

else子句中,expression 由 windows 命令和任何傳遞到命令的引數組成。

附加乙個例項,都是轉的……謝謝作者

1。判斷目錄或檔案的存在,來從伺服器同步檔案到本地

如d:\pubclt 目錄被客人刪除。可以用這種辦法解決(注:我的伺服器為fyt200)

@echo off

if exist tmp.txt del /q tmp.txt

for /f %%i in ('dir /a /b d:\pubclt\pubwin.exe') do echo %%i>>tmp.txt

if exist tmp.txt (goto 11) else (goto 12)

if exist tmp.txt del /q tmp.txt

:11@echo -----------------------------

@echo 客戶端無需更新.

@echo -----------------------------

goto q

:12xcopy

\\fyt200\share\pubclt

d:\pubclt\ /s /f /y /q &

\\fyt200\share\soft\control\pubwin.exe

d:\pubclt\pubwin.exe

@echo -----------------------------

@echo ....客戶端更新完畢...........

@echo ----------------------------- :q

exit

這個批處理的意思是查詢d盤中pubclt目錄下的pubwin.exe檔案,如果查詢存在,則goto 11,如不存在則 goto12 其實這種辦法可以用if exist 和if not exist命令實現,但是本人覺得這個會更好用一些。處理面也會廣很多。

2。對比伺服器的某個目錄,刪除多餘的目錄和檔案。(注:我的伺服器為fyt200)

@echo -----------------------------

@echo .同步更新磁碟d中所有和資料夾.

@echo -----------------------------

@echo .

cd /d d:

for /f "usebackq delims=" %%a in (`dir /a /b`) do (attrib "%%a" -r -h -s)

for /d %%a in ("d:\*") do if not exist "

\\fyt200\share\%%~na

" rd /s /q "%%a"

for %%a in ("d:\*") do if not exist "

\\fyt200\share\%%~na

" del /f /q "%%a"

3。隱藏d盤根目錄中的所有檔案和資料夾

cd /d d:

for /f "usebackq delims=" %%a in (`dir /a /b`) do (attrib "%%a" -r +h -s)

這個懂點批處理的人可能都懂,不多解釋

4。在批處理中使用密碼。當然只是簡單的批處理,沒有辦法使用星號密碼,技術還沒有到那個地步。呵呵。。

@echo off

set num=0

:11set /p pass=請輸入密碼:

if "%pass%"=="admin" goto next1

set /a num=%num% + 1

if %num%==3 goto no1

goto 11

:no1

%windir%\system32\rundll32.exe user32.dll,lockworkstation

goto 11

:next1

pause

這個批處理的意思是:先設定num為0。密碼為admin 輸入正確,跳轉到next1 ,若密碼輸入錯誤一次,則num加1,若3此輸入密碼錯誤則鎖屏。。

另:批處理做好後,最好是使用quickbat等軟體把檔案屬性改為幽靈檔案。然後編譯為exe檔案。或者用vbs檔案後台執行,vbs這個網上都很流行。如:

dim objshell

set objshell=wscript.createobject("wscript.shell")

ireturn=objshell.run("cmd.exe /c\\192.168.0.200\share\soft\control\client.bat", 0, true)

批處理SQL語句

作用 想傳送多條sql,又要降低與資料庫系統的互動,這時使用批處理 一 statement物件 適合對不同結構的sql語句進行批處理操作 步驟 1 將給定的 sql 命令新增到此 statement 物件的當前命令列表中 void addbatch string sql 2 將一批命令提交給資料庫來...

批處理(語句結構)

批處理是一門簡單的指令碼語言,雖然不能獨當一面,但可以作為工作中的輔助工具 和其他語言相比,批處理語言有其先天性的優勢 1 系統自帶,無需另行安裝 2 命令少,語句簡潔,上手非常快 3 編寫出來的指令碼小巧玲瓏,隨寫隨用 一,語句結構 選擇和迴圈 1.if 條件判斷語句 選擇結構 判斷資訊是否相等 ...

批處理SQL語句

作用 想傳送多條sql,又要降低與資料庫系統的互動,這時使用批處理 一 statement物件 適合對不同結構的sql語句進行批處理操作 步驟 1 將給定的 sql 命令新增到此 statement 物件的當前命令列表中 void addbatch string sql 2 將一批命令提交給資料庫來...