命令提示字元的重導向,流程控制,條件執行,定義變數功能
這裡主要介紹的都是Windows的Command line指令,Windows的指令不分大小寫。
如果參數、檔案名稱或目錄路徑中有空白,就必須用雙引號刮起來,否則下的指令會出錯。
"C:\Foo foo\bar.exe" foo.txt "foo Foo.txt"
除非你用了^才能印出特殊字元,這個就類似C/C++的跳脫字元會用斜線 \ 開頭,
在要顯示的特殊符號前加上^,例如^^就可以表示特殊符號^,例如:
Echo 1000022 ^> ^^ ^< ^& 123
會顯示
1000022 > ^ < & 123
重新導向(螢幕資料儲存到檔案)
重新導像符號就是將螢幕上的文字輸出,或者錯誤訊息的輸出,導向到某個指定的檔案中存起來,或者是將特定檔案的資料當成使用者的輸入。
將螢幕上的文字輸出到檔案使用>符號
echo abc > stdout.txt
這個功能在跑批次時非常好用,但是缺點就是你會不知道程式有沒有在跑。
另外,兩個連續的>>符號,表示的是加入到指定的檔案,先前檔案內的內容不會被刪掉。
>>
使用<符號則是將檔案當成使用者的輸入丟到程式/指令裡面,這個功能一般比較少用
<
流程控制(if, goto)
我比較少用這種功能,因為有些在C/C++程式裡面寫就好了
if %NUMBER_OF_PROCESSORS%==1 echo you've only one processor
if not "%OS%"=="" @echo your os is %os%
if "%abc%"=="" (echo nothing) else (echo yes)
if /i "a"=="A" echo a is the same as A
goto begin;
檢查檔案或是目錄是否存在
IF EXIST filename command para1 para2
IF NOT EXIST filename command para1 para2
&
&&
||
到當前目錄
到上一層目錄
讀取變數或是系統變數
數值運算
使用者指定輸入到變數
單行註解
呼叫另一個Batch檔案
開啟另一個Command line執行後面的指令 (可以啟動多個Process執行程式的意思)
印出日期時間
列出當前目錄下副檔名為bmp的檔案名稱(/B),只有檔案名稱。
從1顯示到100
cd .\
cd ..\
定義變數
自定變數,不建議大家當作C/C++的變數使用set var=henry
讀取變數或是系統變數
%var% 取用自訂的變數
%path% 取用系統路徑
%cd% 取用目前工作目錄
印出變數可以用echo %var%
數值運算
set /a var=3*2
set /p var=Please write something:
單行註解
rem 我的註解文字
指令應用
強制(/F)從當前工作目錄及子目錄(/S)中刪除*.log檔案Del /S /F *.log
呼叫另一個Batch檔案
call demo.bat
開啟另一個Command line執行後面的指令 (可以啟動多個Process執行程式的意思)
Start demo.bat
印出日期時間
echo %DATE% %TIME%
列出當前目錄下副檔名為bmp的檔案名稱(/B),只有檔案名稱。
dir /B *.bmp
從1顯示到100
for /L %i in (1,1,100) do echo %i
印出不換行字串
印出換行字串
set /p=MY NAME is ABCDEF > text.txt
印出換行字串
Echo MY NAME is ABCDEF
假設一個變數名稱為%%v內容是一個檔案的完整路徑,例如C:\MyData\Images\Img001.jpg
則有下面幾種不同的使用方法
%%~nv 取檔名,得到
Img001
%%~xv 取副檔名,得到 .
jpg
%%~dv 取得磁碟機名稱,得到 C:
%%~pv 取得目錄路徑(會包含\),得到 \
MyData\Images\
%%~zv 得到檔案大小,得到檔案的byte數
有些可以合併使用
%%~nxv 取檔案名稱,得到
Img001.jpg
%%~dpv 取得完整的目錄路徑,得到
C:\MyData\Images
留言