cmd | |
---|---|
dir | 列檔名 |
cd | 改變當前目錄 |
ren | 改變檔名 |
copy | 拷貝檔案 |
del | 刪除檔案 |
md | 建立子目錄 |
rd | 刪除目錄 |
deltree | 刪除目錄樹 |
format | 格式化磁碟 |
edit | 文字編輯 |
type | 顯示檔案內容 |
help | 顯示幫助提示 |
cls | 清屏 |
move | 移動檔案,改目錄名 |
more | 分屏顯示 |
xcopy | 拷貝目錄和檔案 |
set /p Num=請輸入一個整數:
set Square=
call 被呼叫.bat Num Square
echo 現在又回到了 呼叫.bat ,而且,%Num% 的平方是 %Square% 。
pause
::::::::::::::::::::::::::::::::
:::::::::::被呼叫.bat:::::::::::
echo 這裏是 被呼叫.bat
echo 您輸入的第1條參數爲 %1
echo 您輸入的第2條參數爲 %2
set /a %2 = %1 * %1
echo 經過計算後,您輸入的第1條參數爲 %1
echo 經過計算後,您輸入的第2條參數爲 %2
pause
::::::::::::::::::::::::::::::::
:SecondLable
echo 然後顯示這句
pause
goto :EOF
:FirstLable
echo 首先顯示這句,後面跟的參數爲 %1
pause
::::::::::::::::::::::::::::::::
對於 goto 所跟的標籤或 start 所跟的程式,它們後面能否加參數呢?答案是:前者是否定的;後者是肯定的,試試看。
set var=Tom
if %var%==Tom echo It works
if %var%==Jerry echo We will never see this
如果變數 var 的值爲 Tom Hanks ,即中間含有空格之類的特殊符號,那麼我們在使用 if 時,就得爲字串加上雙引號,就像 if 「%var%」==「Tom Hanks」 echo It works (注意,給字串加上雙引號後,在進行判斷的時候會連雙引號一起考慮進去。所以,爲了使兩邊的對比均衡,所以一定要在 == 兩邊的兩個字串上同時都加雙引號)。這裏也體現了批次程式語言格式的多樣性(如果您熟悉 C 語言格式的話,就知道一串字元總是要被雙引號引起來)。不過爲了方便記憶,我們在使用 if 的時候,不妨總是在字串上使用雙引號,這樣既好閱讀,又不容易引起歧異。
:::::::::else的用法.bat:::::::::
@echo off
if 「%TIME:~0,2%」 lss 「12」 (
echo 現在是上午
) else (
echo 現在是下午
)
pause
::::::::::::::::::::::::::::::::
:::::::::else的用法.bat:::::::::
@echo off
if 「%TIME:~0,2%」 lss 「12」 (
if 「%TIME:~0,2%」 lss " 6" (
echo 現在是凌晨
) else (
echo 現在是上午
)
) else (
if 「%TIME:~0,2%」 lss 「18」 (
echo 現在是下午
) else (
echo 現在是晚上
)
)
pause
::::::::::::::::::::::::::::::::
4.1.4 剛纔提到的數值型變數的比較,其實很簡單,就如下面 下麪的例子中描述的一樣。
::::::::::::::::::::::::::::::::
@echo off
set /a num=5
if %num% == 5 (
echo 變數 num 等於 5
)
if not %num% == 4 (
echo 變數 num 不等於 4
)
set /a num = ( %num% + 3 ) * 2
:: 變數 num 加3並乘2後再賦給變數 num 自身
if %num% == 16 (
echo 經過運算後,現在變數 num 等於16
)
if not %num% == 16 (
echo 此時的變數 num 不會不等於 16 ,因此這一句不會顯示了
)
pause
::::::::::::::::::::::::::::::::
::::::::延遲變數擴充.bat::::::::
@echo off
setlocal EnableDelayedExpansion
set /a num=5
if %num% == 5 (
set /a num*=3
echo 在 if 語句之前,變數 num 等於 %num%
echo 但變數 num 在經過運算後,且由於延遲變數擴充被啓用,變數 num 等於 !num!
)
echo 但最終變數 num 還是等於 %num%
pause
::::::::::::::::::::::::::::::::
if 條件下的兩行 echo 在輸出變數值的時候用到的符號不一樣,一個是用百分號 % 包括起來的,另一個用的卻是驚歎號 ! 。雖然在顯示 %num% 之前已經使變數 num 的數值乘了3倍,但是由於沒有延遲變數的擴充,使得 %num% 的結果仍然是 5 。但用 !num! 顯示出的值已經變爲 15 了。注意到批次處理中的 setlocal EnableDelayedExpansion (setlocal/? 檢視相關資訊),這表示開啓延遲變數擴充。此時的 !num! 纔有意義。不然 !num! 將無法被識別,因爲在預設情況下,延遲變數擴充是被停用的。
4.1.6 此外,if 還有其他的用法—— if exist 和 if defined 。if exist 可判斷檔案是否存在,就像這樣:
if exist 「D:\test my folder\a.txt」 (
del 「D:\test my folder\a.txt」
) else (
echo 您所要刪除的檔案不存在
)
在對檔案進行操作之前進行判斷其是否存在很有意義,這使得程式碼更加健壯。
而對於 if defined 來說,與 if exist 類似,只不過 if defined 的判斷物件不是檔案,而是變數,它用於判斷環境變數是否被定義。
for %i in (.) do @echo %i
for 、in 和 do ,是 for 的固定用法。其內容可以理解爲:在某一範圍內(in),對於其中的某一檔案來說(for),做如下的處理(do)。而 for %i in (.) do @echo %i 就是在當前工作目錄的所有檔案中(in (.)),對於其中的某一檔案(for %i),做出顯示其名稱的處理(do @echo %i)。變數 i 僅在當前回圈語句 for 裡起作用,%i 表示其值。
注意:以上是直接在命令提示字元裡以命令的形式表達出來的寫法;在批次檔中應使用雙百分號 %% 代替單百分比號 % ,就像:%%i
:::::::批次修改檔名.bat:::::::
@echo off
setlocal EnableDelayedExpansion
set /a num=1
for %%i in (D:\test*.txt) do (
ren 「%%i」 !num!.txt
set /a num+=1
)
::::::::::::::::::::::::::::::::