cd %~dp0 切換到當前腳本全部目錄
html
批處理經常使用命令總結 - 批處理命令簡介 windows
目錄bash
echopost
打開回顯或關閉請求回顯功能,或顯示消息。若是沒有任何參數,echo 命令將顯示當前回顯設置。測試
echo [{on|off}] [message]url
Sample:@echo off / echo hello worldspa
在實際應用中咱們會把這條命令和重定向符號(也稱爲管道符號,通常用> >> ^)結合來實現輸入一些命令到特定的文件中。.net
rem命令行
註釋命令,相似於在C語言中的/*--------*/,它並不會被執行,只是起一個註釋的做用,便於別人閱讀和你本身往後修改。指針
Rem Message
Sample:@Rem Here is the description.
pause
暫停命令。運行 Pause 命令時,將顯示下面的消息:Press any key to continue. . .(或:請按任意鍵繼續. . .)
Sample:
@echo off
:begin
copy G:*.* d:/back
echo 請插入另外一張光盤...
pause
goto begin
在這個例子中,驅動器 G 中磁盤上的全部文件均複製到d:/back中。顯示的註釋提示您將另外一張光盤盤放入驅動器 G 時,pause 命令會使程序掛起,以便您更換光盤,而後按任意鍵繼續處理。
call
從一個批處理程序調用另外一個批處理程序,而且不終止父批處理程序。call 命令接受用做調用目標的標籤。若是在腳本或批處理文件外使用 Call,它將不會在命令行起做用。
call [[Drive:][Path] FileName ] [:label [arguments]]
參數
[Drive:}[Path] FileName
指定要調用的批處理程序的位置和名稱。
start 命令
調用外部程序,全部的DOS命令和命令行程序均可以由start命令來調用。 如:start calc.exe 便可打開Windows的計算器。
執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示。若是在命令腳本內執行,該新行爲則不會發生。
goto
跳轉命令。程序指針跳轉到指定的標籤,從標籤後的第一條命令開始繼續執行批處理程序。
goto label (label是參數,指定所要轉向的批處理程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(若是這裏的if、%一、%2你不明白的話,先跳過去,後面會有詳細的解釋
。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
標籤的名字能夠隨便起,可是最好是有意義的字母啦,字母前加個:用來表示這個字母是標籤,goto命令就是根據這個:來尋找下一步跳到到那裏。最好有一些說明這樣你別人看起來纔會理解你的意圖啊。
set
顯示、設置或刪除變量。
顯示變量:set 或 set s 前者顯示批處理當前已定義的全部變量及其值,後者顯示全部以s開頭的變量及值。
設置變量:set aa=abcd 此句命令即可向變量aa賦值abcd。
若是變量aa已被定義,則aa的值被修改成abcd;若aa還沒有定義,則此句命令便可定義新的變量aa,同時爲變量aa賦予初始值abcd。
刪除變量:set aa= 此句命令便可刪除變量aa。若變量aa已被定義,則刪除變量aa;若aa還沒有定義,則此句命令爲實質意義。
須要說明的是,批處理中的變量是不區分類型的,不須要像C語言中的變量那樣還要區分int、float、char等。好比執行set aa=345後,變量aa的值既能夠被視爲數字345,也能夠被視爲字符串345。
set命令具備擴展功能,如用做交互輸入、字符串處理、數值計算等,屬於高級命令範疇。
批處理經常使用命令及用法大全
閱讀下面文字須要必定的dos基礎概念,象:盤符、文件、目錄(文件夾)、子目錄、根目錄、當前目錄
每一個命令的完整說明請加 /? 參數參考微軟的幫助文檔能夠看到,在 /? 幫助裏,"命令擴展名"一詞會常常出現"命令擴展名"是指相對於win98的dos版本而言,每一個命令新增的功能命令測試環境win2000proSP4win98的命令功能太少,就不做研究了。
注:若是對某一命令還不是很熟悉,能夠在命令行窗口下輸入:命令名/?的方式來得到幫助。
例如:對dir命令的應用不熟悉,能夠在命令行窗口下輸入:dir /?
"關閉回顯"是指運行批處理文件時,不顯示文件裏的每條命令,只顯示運行結果批處理開始和結束時,系統都會自動打開
echo %errorlevel%每一個命令運行結束,能夠用這個命令行格式查看返回碼用於判斷剛纔的命令是否執行成功默認值爲0,
通常命令執行出錯會設 errorlevel 爲1
其它參數可參考 dir /?
運行該命令時,將顯示消息:請按任意鍵繼續 . . .,通常用於看清楚屏幕上顯示的內容
註釋行不執行操做
前一個命令的執行結果輸出到後一個命令
dir *.* /s/a | find /c ".exe"管道命令表示先執行 dir 命令,對其輸出的結果執行後面的 find 命令該命令行結果:
輸出當前文件夾及全部子文件夾裏的.exe文件的個數
type c:/test.txt|more這個和 more c:/test.txt 的效果是同樣的
> 清除文件中原有的內容後再寫入
>> 追加內容到文件末尾,而不會清除原有的內容主要將原本顯示在屏幕上的內容輸出到指定文件中指定文件若是不存在,則自動生成該文件
echo hello world>c:/test.txt 生成c:/test.txt文件,內容爲hello world這個格式在批處理文件裏用得不少,能夠生成.reg .bat .vbs 等臨時文件
type c:/test.txt >prn 屏幕上不顯示文件內容,轉向輸出到打印機
echo hello world>con 在屏幕上顯示hello world,實際上全部輸出都是默認 >con 的
copy c:/test.txt f: >nul 拷貝文件,而且不顯示"文件複製成功"的提示信息,但若是f盤不存在,仍是會顯示出錯信息
copy c:/test.txt f: >nul 2>nul 不顯示"文件複製成功"的提示信息,而且f盤不存在的話,也不顯示錯誤提示信息
echo ^^W ^> ^W>c:/test.txt 生成的文件內容爲 ^W > W^ 和 > 是控制命令,要把它們輸出到文件,必須在前面加個 ^符號
通常用於 date time label 等須要等待輸入的命令,這樣就能夠不等待輸入直接修改當前日期
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
在C盤根目錄新建test.bat,內容以下:
@echo off
echo %0
echo %1
echo %2
echo %*
運行cmd,輸入 c:/test.bat "/a" /b /c /d,能夠看出每一個參數的含意 修改test.bat內容以下
@echo off
echo %1
echo %~1
echo %0
echo %~f0
echo %~d0
echo %~p0
echo %~n0
echo %~x0
echo %~s0
echo %~a0
echo %~t0
echo %~z0
再運行cmd,輸入 c:/test.bat "/a" /b /c /d能夠參照 call/? 或 for/? 看出每一個參數的含意,注意這裏能夠對文件進行日期比較和大小比較:
echo load "%%1" "%%2">c:/test.txt
生成的文件內容爲 load "%1" "%2"批處理文件裏,用這個格式把命令行參數輸出到文件
引用變量可在變量名先後加 % ,即 %變量名%
set #顯示目前全部可用的變量,包括系統變量和自定義的變量
echo %SystemDrive% #顯示系統盤盤符。系統變量能夠直接引用
set p #顯示全部以p開頭的變量,要是一個也沒有就設errorlevel=1
set p=aa1bb1aa2bb2 #設置變量p,並賦值爲 = 後面的字符串,即aa1bb1aa2bb2
echo %p% #顯示變量p表明的字符串,即aa1bb1aa2bb2
echo %p:~6% #顯示變量p中第6個字符之後的全部字符,即aa2bb2
echo %p:~6,3% #顯示第6個字符之後的3個字符,即aa2
echo %p:~0,3% #顯示前3個字符,即aa1
echo %p:~-2% #顯示最後面的2個字符,即b2
echo %p:~0,-2% #顯示除了最後2個字符之外的其它字符,即aa1bb1aa2b
echo %p:aa=c% #用c替換變量p中全部的aa,即顯示c1bb1c2bb2
echo %p:aa=% #將變量p中的全部aa字符串置換爲空,即顯示1bb12bb2
echo %p:*bb=c% #第一個bb及其以前的全部字符被替換爲c,即顯示c1aa2bb2
set p=%p:*bb=c% #設置變量p,賦值爲 %p:*bb=c% ,即c1aa2bb2
set /a p=39 #設置p爲數值型變量,值爲39
set /a p=39/10 #支持運算符,有小數時用去尾法,39/10=3.9,去尾得3,p=3set /a p=p/10
#用 /a 參數時,在 = 後面的變量能夠不加%直接引用set /a p="1&0"
#"與"運算,要加引號。其它支持的運算符參見set/?
set p= #取消p變量
set /p p= 請輸入屏幕上顯示"請輸入",並會將輸入的字符串賦值給變量p注意這條能夠用來取代 choice 命令
注意變量在 if 和 for 的複合語句裏是一次性所有替換的,如
@echo off
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo %p% )
結果將顯示aaaaaa由於在讀取 if 語句時已經將全部 %p% 替換爲aaa這裏的"替換",在 /? 幫助裏就是指"擴充"、"環境變量擴充"能夠啓用"延緩環境變量擴充",用 ! 來引用變量,即!變量名!
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaaif %p%==aaa (
echo %p%
set p=bbb
echo !p! )
ENDLOCAL
結果將顯示aaabbb 還有幾個動態變量,運行 set 看不到
%CD% #表明當前目錄的字符串
%DATE% #當前日期
%TIME% #當前時間
%RANDOM% #隨機整數,介於0~32767
%ERRORLEVEL% #當前ERRORLEVEL 值
%CMDEXTVERSION% #當前命令處理器擴展名版本號
%CMDCMDLINE% #調用命令處理器的原始命令行能夠用echo命令查看每一個變量值,如 echo %time%
注意 %time%精確到毫秒,在批處理須要延時處理時能夠用到
不加 start 命令的話,"勁舞團"運行時,後面會有個黑乎乎的cmd窗口
win98裏是choice.com,win2000pro裏沒有,能夠從win98裏拷過來,win2003裏是choice.exe
choice /N /C y /T 5 /D y>nul延時5秒
下面是個 choice 語句的例子
@echo off
rem 如下在win2000pro運行經過,從win98裏拷的chioce.com文件
choice /c:abc aaa,bbb,ccc
if errorlevel 3 goto ccc
if %errorlevel%==2 goto bbb
if errorlevel==1 goto aaa
rem 必須先判斷數值高的返回碼rem 能夠看到 errorlevel 值的判斷有3種寫法,有時某種寫法很差用,能夠用另外的寫法
rem 直接運行
chioce至關於運行
choice /c:yn:aaa
echo aaa
goto end
:bbb
echo bbb
goto end
:ccc
echo ccc
goto end
:end
若是該關聯已經被破壞,能夠運行 command.com ,再輸入這條命令
xcopy d:/mp3 e:/mp3 /s/e/i/y
複製 d:/mp3 文件夾、全部子文件夾和文件到 e:/,覆蓋已有文件,加 /i 表示若是 e:/ 沒有 mp3 文件夾就自動新建一個,不然會有詢問
format c: /q/u/autotest/,q表示快速格式化,/autotest表示自動格式化,不須要按 Y 確認,/u表示每字節用F6覆蓋硬盤數據,使其不可用軟件恢復
format c: /c格式化C盤,並檢測壞道
ping -l 65500 -t 192.168.1.200不停的向192.168.1.200計算機發送大小爲65500byte的數據包
ping -n 10 127.0.0.1>nulping本身10次,可用於批處理延時10秒
----------------------------------------------------------------------------------
批處理命令獲取當前盤符和當前目錄
%~d0 是當前盤符
%cd% 是當前目錄
能夠用echo %cd%進行打印測試
如下例子是命令行編譯Visual Studio編寫的程序:
@echo off
set b=%cd% //將當前目錄保存到參數b中,等號先後不要有空格
C:
cd program files
cd microsoft visual studio
cd common
cd msdev98
cd bin
msdev "%b%\test.dsp" /MAKE "test- Win32 Release" /REBUILD //(VC6.0)
devenv "%b%\Tool Utility\Tool Utility.sln" /REBUILD //(VS2010)
pause
注意:若是路徑中包含空格,則應該將路徑加文件名用雙引號括起來。
出處:http://blog.csdn.net/ylmmee/article/details/6735907
===============================================================
廢話很少說,直接看例子:
@echo off
echo 當前盤符:%~d0
echo 當前盤符和路徑:%~dp0
echo 當前盤符和路徑的短文件名格式:%~sdp0
echo 當前批處理全路徑:%~f0
echo 當前CMD默認目錄:%cd%
pause
http://www.2cto.com/kf/201104/88450.html
===============================================================
經過批處理取當前目錄的上一級目錄@echo offif %cd%==%cd:~,3% echo 當前目錄已是%cd:~,1%盤的根目錄!&goto endcd..set "bd=%cd%"cd..set "bbd=%cd%"if "%bbd%"=="%bd%" (echo 上一級目錄是: %cd:~,1%盤的根目錄!) else call echo 上一級目錄是: "%%bd:%bbd%\=%%":endpause