命令提示字元的重導向,流程控制,條件執行,定義變數功能

這裡主要介紹的都是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
原本前面的指令是在螢幕上輸出abc三個字,但是我們使用了導向符號,就變成檔案中才會看到abc三個字。
這個功能在跑批次時非常好用,但是缺點就是你會不知道程式有沒有在跑。

另外,兩個連續的>>符號,表示的是加入到指定的檔案,先前檔案內的內容不會被刪掉。
>>

使用<符號則是將檔案當成使用者的輸入丟到程式/指令裡面,這個功能一般比較少用
<

流程控制(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

設定goto用的標籤

例如定義了一個":begin"標籤,執行到"goto begin"命令之後就會移動到begin標籤"後面的命令了。
:begin


條件執行功能

&
命令連接字符。比如我要在一行文本上同時執行兩個命令,就可以用&命令連接這兩個命令;
&&
連接兩個命令,&&前的命令成功時,才執行&&後的命令
||
連接兩個命令,||前的命令失敗時,才執行||後的命令

當前目錄
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

留言