1.echo命令
①echo 用于顯示此命令后的字符议纯。
echo Hello World!
PAUSE
注:pause是用來暫停的,直到用戶輸入任意鍵關(guān)閉溢谤。
結(jié)果:
E:\>echo Hello World!
Hello World!
E:\>PAUSE
請(qǐng)按任意鍵繼續(xù). . .
②echo off 表示此命令后的所有命令都不顯示命令本身瞻凤。
③@ 與echo off相似憨攒,但只是不顯示當(dāng)行的命令。
@echo off 是經(jīng)常組合放在開頭的阀参。
@echo off
echo Hello World!
PAUSE
結(jié)果:
Hello World!
請(qǐng)按任意鍵繼續(xù). . .
2.注釋
①rem
②::
@echo off
echo Hello World!
rem 我是一個(gè)注釋
:: 巧了我也是一個(gè)注釋
PAUSE
結(jié)果:
Hello World!
請(qǐng)按任意鍵繼續(xù). . .
3.參數(shù)標(biāo)識(shí)符??%
①代表參數(shù)
%[1-9]表示參數(shù)肝集,參數(shù)是指在運(yùn)行批處理文件時(shí)在文件名后加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9蛛壳,%0表示批處理命令本身杏瞻,其它參數(shù)字符串用%1到%9順序表示。
@echo off
type %1
type %2
pause
使用cmd衙荐,進(jìn)入到對(duì)應(yīng)目錄下:
E:\>test a.txt b.txt
我是a我是b請(qǐng)按任意鍵繼續(xù). . .
注:test是我們寫入內(nèi)容的bat文件捞挥,a.txt和b.txt分別是當(dāng)前目錄下的兩個(gè)txt,內(nèi)容分別為“我是a”和“我是b”忧吟。
或者也可以新創(chuàng)建一個(gè)bat文件調(diào)用剛才寫的bat文件:
@echo off
call test a.txt b.txt
pause
②非for語句引用變量
@echo off
set a=HelloWorld!
echo %a%
pause
注意:“set a=HelloWorld!”這句砌函,由于編程習(xí)慣,原意在等號(hào)兩邊加空格溜族,但是這樣的話就會(huì)出現(xiàn)“ECHO處于關(guān)閉狀態(tài)”的錯(cuò)誤了讹俊。
結(jié)果:
HelloWorld!
請(qǐng)按任意鍵繼續(xù). . .
③for語句要用“%%”
@echo off
for %%i in (1 2 3 4 5) do echo %%i
pause
結(jié)果:
1
2
3
4
5
請(qǐng)按任意鍵繼續(xù). . .
4. call
①調(diào)用另一個(gè)bat文件
@echo off
echo 調(diào)用另一個(gè)bat文件:
call another
pause
another.bat:
@echo off
echo 我是另一個(gè)bat文件
pause
結(jié)果:
調(diào)用另一個(gè)bat文件:
我是另一個(gè)bat文件
請(qǐng)按任意鍵繼續(xù). . .
②帶參數(shù)的
test.bat:
@echo off
echo %0 %1
pause
another.bat:
@echo off
call test.bat 我是參數(shù)
pause
運(yùn)行another.bat,結(jié)果:
test.bat 我是參數(shù)
請(qǐng)按任意鍵繼續(xù). . .
③call一個(gè)應(yīng)用程序(但一般都用start)
④call一個(gè)標(biāo)簽
@echo off
call :b
start notepad.exe
exit
:b
start b.txt
結(jié)果:
先打開b.txt煌抒,然后打開了記事本仍劈。
5. if
用于判斷,類似C語言的if
①字符串判斷
if [not] "參數(shù)" == "字符串" 待執(zhí)行的命令
another.bat:
@echo off
call test.bat a
pause
test.bat
@echo off
if not "%1"=="a" (echo 參數(shù)不是a)else (echo 參數(shù)是a)
pause
注意:判斷結(jié)束后寡壮,要和“(”之間留一個(gè)空格贩疙,“else”也要和“(”之間留一個(gè)空格。
運(yùn)行結(jié)果:
參數(shù)是a
請(qǐng)按任意鍵繼續(xù). . .
②判斷數(shù)值相等
@echo off
if 1 equ 2 (echo 1等于2) else (echo 1不等于2)
pause
結(jié)果:
1不等于2
請(qǐng)按任意鍵繼續(xù). . .
注:大于不能使用符號(hào)“>”诬像,而應(yīng)該使用GTR屋群。
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
③文件判斷
@echo off
if exist e:\b.txt (echo e盤下有b.txt) else (echo e盤下沒有b.txt)
pause
結(jié)果:
e盤下有b.txt
請(qǐng)按任意鍵繼續(xù). . .
④判斷某個(gè)變量是否已經(jīng)被賦值闸婴,用 if defined str 語句
@echo off
set str=HelloWorld!
if defined str (echo 變量的值為%str%) else (echo 變量沒有被賦值)
pause
結(jié)果:
變量的值為HelloWorld!
請(qǐng)按任意鍵繼續(xù). . .
⑤ if結(jié)合errorlevel使用
@echo off
xcopy e:\b.txt f:\
if errorlevel 1 echo 文件拷貝失敗
if errorlevel 0 echo 文件拷貝成功
pause
注:返回值必須按照從大到小的順序排列坏挠。
結(jié)果:
E:\b.txt
復(fù)制了 1 個(gè)文件
文件拷貝成功
請(qǐng)按任意鍵繼續(xù). . .
幾個(gè)常用命令的返回值及其代表的意義:
diskcomp
0 盤比較相同
1 盤比較不同
2 用戶通過ctrl-c中止比較操作
3 由于致命的錯(cuò)誤使比較操作中止
4 預(yù)置錯(cuò)誤中止比較
diskcopy
0 盤拷貝操作成功
1 非致命盤讀/寫錯(cuò)
2 用戶通過ctrl-c結(jié)束拷貝操作
3 因致命的處理錯(cuò)誤使盤拷貝中止
4 預(yù)置錯(cuò)誤阻止拷貝操作
format
0 格式化成功
3 用戶通過ctrl-c中止格式化處理
4 因致命的處理錯(cuò)誤使格式化中止
5 在提示"proceed with format(y/n)?"下用戶鍵入n結(jié)束
xcopy
0 成功拷貝文件
1 未找到拷貝文件
2 用戶通過ctrl-c中止拷貝操作
4 預(yù)置錯(cuò)誤阻止文件拷貝操作
5 拷貝過程中寫盤錯(cuò)誤
6. goto
goto是跳到指定的標(biāo)簽位置
@echo off
goto end
echo 這里是結(jié)束標(biāo)簽之前的顯示
:end
echo 這里是結(jié)束標(biāo)簽
pause
結(jié)果:
這里是結(jié)束標(biāo)簽
請(qǐng)按任意鍵繼續(xù). . .
7. for
(1) /f
①/f 解析文本讀取字符串
@echo off
for /f %%i in (歌曲列表.txt) do echo %%i
pause>nul
結(jié)果:
序號(hào)、歌手名-歌曲名.后綴名
1邪乍、徐秉龍/桃十五-空心.MP3
2降狠、是阿涵啊-不斷電.mp3
3、河豚-二號(hào)位.MP3
4庇楞、原·味-褐瞳.lrc
5榜配、徐薇-空心.mp3
可以顯示文件的內(nèi)容。如果去掉“/f”吕晌,并且把“歌曲列表.txt”改成“*.txt”蛋褥,就可以搜索當(dāng)前目錄下txt文件并顯示文件名:
@echo off
for %%i in (*.txt) do echo %%i
pause>nul
結(jié)果:
b.txt
歌曲列表.txt
② delims
做分隔符使用,只會(huì)保留分隔符之前的內(nèi)容睛驳。
@echo off
for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i
pause>nul
結(jié)果:
序號(hào)烙心、歌手名
1膜廊、徐秉龍/桃十五
2、是阿涵啊
3淫茵、河豚
4爪瓜、原·味
5、徐薇
注:若要填入多個(gè)分隔符匙瘪,則寫在等號(hào)后就好铆铆,中間無需加空格
③ tokens
選定分割之后的內(nèi)容。
@echo off
for /f "tokens=1,2 delims=丹喻、." %%i in (歌曲列表.txt) do echo %%i %%j
pause>nul
結(jié)果:
序號(hào) 歌手名-歌曲名
1 徐秉龍/桃十五-空心
2 是阿涵啊-不斷電
3 河豚-二號(hào)位
4 原·味-褐瞳
5 徐薇-空心
說明:
tokens=有時(shí)表示提取全部薄货。
tokens=m表示提取第m列。
tokens=m,n表示提取第m列和第n列碍论。
tokens=m-n表示提取第m列至第n列菲驴。
Tokens=*表示刪除每行前面的空格。忽略行首的所有空格骑冗。
tokens=m*提取第m列以后的所有字符赊瞬,星號(hào)表示剩余的字符。
tokens=m,*提取第m列以后的所有字符贼涩,星號(hào)表示剩余的字符巧涧。
“%%i %%j”對(duì)應(yīng)于“token”后面的列數(shù)。有多少列就要有多少個(gè)輸出變量遥倦,并且各變量中的字母存在先后順序谤绳。
(2)?/L
/L參數(shù)是以增量形式從開始到結(jié)束的一個(gè)數(shù)字序列的迭代數(shù)值范圍。
@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
結(jié)果:
1
2
3
4
5
請(qǐng)按任意鍵繼續(xù). . .
8. rd
刪除文件夾
① rd d:\test
只能刪除空的文件夾袒哥,否則會(huì)提示:目錄不是空的缩筛。
② rd /s test
能達(dá)到刪除文件夾的作用,但是會(huì)詢問是否確認(rèn)(Y/N)?
③ rd /q /s test
安靜模式堡称,帶 /S 刪除目錄樹時(shí)不要求確認(rèn)瞎抛。