bat批處理 if 命令示例詳解
if 命令示例詳解
if,正如它E文中的意思,就是“如果”的意思,用來(lái)進(jìn)行條件判斷。翻譯過(guò)來(lái)的意思就是:如果符合某一條件,便執(zhí)行后面的命令。
主要用來(lái)判斷
1、兩個(gè)“字符串”是否相等;
2、兩個(gè)數(shù)值是大于、小于、等于,然后執(zhí)行相應(yīng)的命令。
當(dāng)然還有特殊用法,如結(jié)合errorlevel:if errorlevel 1 echo error
或者結(jié)合defined(定義的意思):if defined test (echo It is defined) else echo It isn't defined
使用 if 命令判斷上一條命令的退出代碼
左括號(hào)的左邊需要有空格
else 右邊需要有空格左邊建議有空格
右括號(hào)、else、左括號(hào)需要放在同一行
@echo off echo chabaoo.cn | findstr "jb51" if %errorlevel% equ 0 ( echo 找到指定字符串 ) else ( echo 沒(méi)有找到指定字符串 ) pause
if errorlevel 0 判斷的是 errorlevel 是否大于等于 0
@echo off echo chabaoo.cn | findstr "jb51" if errorlevel 1 ( echo 沒(méi)有找到指定字符串 ) else ( echo 找到指定字符串 ) pause
但 把 if errorlevel 0 放在最前面在邏輯上是錯(cuò)誤的
if errorlevel 0 ( echo 找到指定字符串 ) else if errorlevel 1 ( echo沒(méi)有找到指定字符串 )
使用 if 命令判斷文件是否存在
不使用反斜線的情況下 if exist 命令無(wú)法直接區(qū)分文件和文件夾
判斷文件夾的時(shí)候在最后加上反斜線
@echo off if exist "C:\Program Files\" ( echo 文件夾存在 ) else ( echo 文件夾不存在 ) pause
判斷文件的時(shí)候先排除文件夾
if not 表示條件不成立的情況下執(zhí)行命令
@echo off if not exist "1.txt\" ( if exist "1.txt" ( echo 文件存在 ) else ( echo 文件不存在 ) ) pause
使用 if 命令進(jìn)行字符串比較
使用 == 判斷兩個(gè)字符串或數(shù)字是否相等
if 1 == 1 echo yes
if "a" == "a" echo yes
使用 /i 可以忽略字母大小寫
if "a" == "A" echo yes
if /i "a" == "A" echo yes
數(shù)字比較不要使用雙引號(hào)
使用雙引號(hào)之后會(huì)變成字符串比較
if 2 gtr 10 echo yes
if "2" gtr "10" echo yes
比較操作符
equ
neq
lss
leq
gtr
geq
equal
not equal
less than
less than or equal
greater than
greater than or equal
等于
不等于
小于
小于或等于
大于
大于或等于
批處理if命令字符串比較和ASCII的關(guān)系
數(shù)字小于字母。
同一個(gè)字母,小寫字母小于大寫字母。
不同的字母,按照字母表中的順序排列。
擴(kuò)展閱讀
http://chabaoo.cn/article/223121.htm
http://bbs.bathome.net/thread-12314-1-1.html
http://bbs.bathome.net/thread-12329-1-1.html
if命令知識(shí)點(diǎn)(1)變量延遲擴(kuò)展
復(fù)合語(yǔ)句需要啟用變量延遲擴(kuò)展
錯(cuò)誤寫法
@echo off set VAR=before if "%VAR%" == "before" ( set VAR=after if "%VAR%" == "after" ( echo 重新賦值成功 ) else ( echo 重新賦值失敗 ) ) pause
正確寫法
@echo off setlocal enabledelayedexpansion set VAR=before if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" ( echo 重新賦值成功 ) else ( echo 重新賦值失敗 ) ) pause
錯(cuò)誤寫法
@echo off for %%i in ("C:\Windows\*.exe") do ( set list=%list% %%i ) echo %list% pause
正確寫法
@echo off setlocal enabledelayedexpansion for %%i in ("C:\Windows\*.exe") do ( set list=!list! %%i ) echo %list% pause
批處理中的變量延遲擴(kuò)展、變量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
if命令知識(shí)點(diǎn)(2)刪除重復(fù)行
使用 if defined 命令刪除文本中的重復(fù)行
@echo off for /f "delims=" %%i in (1.txt) do ( if not defined _%%i ( echo,%%i set "_%%i=1" ) ) pause
C:\>type 1.txt
bbs
bathome
net
bathome
C:\>test.bat
bbs
bathome
net
請(qǐng)按任意鍵繼續(xù). . .
這個(gè)方法不適合用來(lái)處理非常大的文件,而且無(wú)法處理包含等號(hào)的行,參考:
http://bbs.bathome.net/thread-4690-1-1.html
下面是一些補(bǔ)充
用法示例:
1、檢測(cè)字符串(注意,用if檢測(cè)字符串是否相等的時(shí)候,后面用的不是“=”,而是“==”):
@echo off set "str=this is a test" REM 檢測(cè)變量%str%是否等于test,如果相等,顯示OK,否則顯示NO if "%str%"=="test" (echo OK) else echo NO pause>nul
2、檢測(cè)數(shù)值:(注意,批處理中大于符號(hào)不能用:“>”,而用"gtr",其它的也類似)
比較運(yùn)算符一覽:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
檢測(cè)數(shù)值 20 是否大于 15演示代碼:
@echo off set /a num1=20 set /a num2=15 if %num1% gtr %num2% echo %num1%大于%num2% if %num1% EQU %num2% echo %num1%等于%num2% if %num1% LSS %num2% echo %num1%小于%num2% pause>nul
3、if結(jié)合errorlevel使用:
說(shuō)明:環(huán)境變量errorlevel的初始值為0,當(dāng)一些命令執(zhí)行不成功,就會(huì)返回一個(gè)數(shù)值,如:1 ,2 等
IF-ERRORLEVEL
測(cè)試代碼:
@ECHO OFF XCOPY F:\test.bat D:\ IF ERRORLEVEL 1 ECHO 文件拷貝失敗 IF ERRORLEVEL 0 ECHO 成功拷貝文件
如果文件拷貝成功,屏幕就會(huì)顯示“成功拷貝文件”,否則就會(huì)顯示“文件拷貝失敗”。
IF ERRORLEVEL 是用來(lái)測(cè)試它的上一個(gè)DOS命令的返回值的,注意只是上一個(gè)命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批處理文件是錯(cuò)誤的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷貝文件
IF ERRORLEVEL 1 ECHO 未找到拷貝文件
IF ERRORLEVEL 2 ECHO 用戶通過(guò)ctrl-c中止拷貝操作
IF ERRORLEVEL 3 ECHO 預(yù)置錯(cuò)誤阻止文件拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過(guò)程中寫盤錯(cuò)誤
無(wú)論拷貝是否成功,后面的:
未找到拷貝文件
用戶通過(guò)ctrl-c中止拷貝操作
預(yù)置錯(cuò)誤阻止文件拷貝操作
拷貝過(guò)程中寫盤錯(cuò)誤
都將顯示出來(lái)。
附錄:
以下就是幾個(gè)常用命令的返回值及其代表的意義:
backup
0 備份成功
1 未找到備份文件
2 文件共享沖突阻止備份完成
3 用戶用ctrl-c中止備份
4 由于致命的錯(cuò)誤使備份操作中止
diskcomp
0 盤比較相同
1 盤比較不同
2 用戶通過(guò)ctrl-c中止比較操作
3 由于致命的錯(cuò)誤使比較操作中止
4 預(yù)置錯(cuò)誤中止比較
diskcopy
0 盤拷貝操作成功
1 非致命盤讀/寫錯(cuò)
2 用戶通過(guò)ctrl-c結(jié)束拷貝操作
3 因致命的處理錯(cuò)誤使盤拷貝中止
4 預(yù)置錯(cuò)誤阻止拷貝操作
format
0 格式化成功
3 用戶通過(guò)ctrl-c中止格式化處理
4 因致命的處理錯(cuò)誤使格式化中止
5 在提示“proceed with format(y/n)?”下用戶鍵入n結(jié)束
xcopy
0 成功拷貝文件
1 未找到拷貝文件
2 用戶通過(guò)ctrl-c中止拷貝操作
4 預(yù)置錯(cuò)誤阻止文件拷貝操作
5 拷貝過(guò)程中寫盤錯(cuò)誤
4、if還有一個(gè)特殊的用法就是可以用來(lái)檢測(cè)某個(gè)變量是否已經(jīng)被定義
用法示例:
@echo off set "str1=ok" set "str2=no" if defined str1 echo str1已經(jīng)被定義 if defined str2 echo str2已經(jīng)被定義 if defined str3 (echo str3已經(jīng)被定義) else echo str3 沒(méi)有被定義 pause>nul
待續(xù)....
相關(guān)文章
批處理從html格式(接收到的郵件)中讀取數(shù)據(jù)的操作方法
這篇文章主要介紹了批處理從html格式(接收到的郵件)中讀取數(shù)據(jù)的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01dos之net創(chuàng)建管理員用戶的實(shí)現(xiàn)
這篇文章主要介紹了dos之net創(chuàng)建管理員用戶的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11批處理delims=和tokens=星號(hào) 的使用差別
"delims=" 的含義是取消默認(rèn)的分隔符,所以會(huì)把行上的內(nèi)容照搬下來(lái),而 "tokens=*" 表示獲取行上的所有內(nèi)容,但是會(huì)忽略行首的所有空格。2008-08-08用bat和 reg實(shí)現(xiàn)關(guān)閉局域網(wǎng)共享
這篇文章主要是為大家介紹一下通過(guò)reg關(guān)閉局域網(wǎng)共享的代碼,其實(shí)這個(gè)cmd命令就是一個(gè)注冊(cè)表的導(dǎo)入功能,直接雙擊運(yùn)行reg文件也是可以的2007-10-10Netsh 命令備份和恢復(fù)網(wǎng)絡(luò)設(shè)置
Netsh是Windows 2000/XP/2003操作系統(tǒng)自身提供的命令行腳本實(shí)用工具,它允許用戶在本地或遠(yuǎn)程顯示或修改當(dāng)前正在運(yùn)行的計(jì)算機(jī)的網(wǎng)絡(luò)配置。2009-06-06批處理判斷第一個(gè)硬盤的最后一個(gè)分區(qū)并進(jìn)入的bat代碼
這篇文章主要介紹了DOS判斷第一個(gè)硬盤最后一個(gè)分區(qū)的盤符并進(jìn)入該邏輯盤,需要的朋友可以參考下2020-09-09