一些常用的batch命令

最新工作中,需要編寫一引起腳本文件,主要是爲方便大家使用,儘量做到最簡單的一鍵操作的功能。經過各種調試後,終於完成了功能,並且初步達到了當初的設想。

把最常用到的指令貼上來,方便以後需要時,能找到,也方便對有需要的人有所幫助。

@set VERSION_FILE_PATH=../../app/common/interface.c
@sed -n -e 's/#define[ \t]*SW_VERSION_PINK[ \t]*[\(]*[ \t]*\([0-9]*\)[ \t]*[\)]*.*$/\1/p'  %VERSION_FILE_PATH% > ver.txt
@set /p SW_VER= < ver.txt
@del ver.txt

@set SW_VER_HIGH=%SW_VER:~0,-2%
@set SW_VER_LOW=%SW_VER:~-2,2%
上面的是獲取文件中文件中的某個值或者說版本號,通過版本號,在生成所需要的文件中,不需要重新定義及修改。


if exist ME_Africa_sattp_S2.bin (
   echo "ME_Africa_sattp_S2.bin exist"
) else (
echo "ME_Africa_sattp_S2.bin No exist"
SatTPClient.exe ME_Africa_sattp_S2.cfg ME_Africa_sattp_S2.bin
)
if exist Softcam.bin (
   echo "Softcam.bin exist"
) else (
echo "Softcam.bin No exist"
Softcam.exe
)
上面主要是判斷文件是否存在,如果文件不存在,則執行else 中的文件生成文件,這樣節約時間。



@echo off
for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get DeviceID /value') do (
  set DriveU=%%a
)
if defined DriveU (
	echo Update file Copy tu USB drive, please wait...
	COLOR 0A
	copy MT_pink_update.bin %DriveU%\Software_V%SW_VER_HIGH%.%SW_VER_LOW%_%day%-%month%-%year%.bin
) else (
	echo Please insert the usb flash drive.)
這個主要是獲取是否已經插入可移動磁盤,如果插入可移動磁盤,就會自動Copy到移動磁盤中。現好像只支持U盤,移動硬盤倒是沒有測試過。如果有問題,需要簡單的修改一下就可以,也可以按照下面的配置要求,進行修改,達到所需要的要求。。
wmic logicaldisk where drivetype='2' get deviceid,description
wmic logicaldisk where "drivetype=2" get name
::2=移動磁盤、3=本地磁盤、5=光驅。



:loop
@echo off
for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get DeviceID /value') do (
  set DriveU=%%a
)

::判斷DriveU是否爲空
if defined DriveU (
	echo Is in copy, please wait ...
	ping -n 3 127.0.0.1>nul
	COLOR 0A
	copy .\mapp.bin %DriveU%\mapp.bin
	ping -n 3 127.0.0.1>nul 
) else (
	echo Please insert the usb flash drive[請插入U盤]
	ping -n 3 127.0.0.1>nul 
goto loop)

exit
這個功能主要是Copy到U盤中,如果沒有插入U盤,會一直提示你插入U盤,循環進行檢測,直到插入U盤後Copy到U盤中才停止。而
ping -n 3 127.0.0.1>nul
主要是爲了延時使用的。使用時需要調用@echo off關掉打印。


其實上面所使用的這些,無非就是對for的使用,通過學習,總結到如下幾點:
<pre name="code" class="plain">FOR [參數] %%變量名 IN (相關文件或命令)   DO 執行的命令
FOR 參數 %%變量名 IN (相關文件或命令) DO 執行的命令
參數 /L (該集表示以增量形式從開始到結束的一個數字序列。可以使用負的 Step)
比如:for /l %%i in (1,1,5) do @echo %%i  --輸出1 2 3 4 5   


FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]   
參數 /R (搜索指定路徑及所有子目錄中與set相符合的所有文件)
參數 /d (參數只能顯示當前目錄下的目錄名字)
比如:
for /r c:/ %%i in (boot.ini) do echo %%i --枚舉了c盤所有目錄   
for /r d:/backup %%i in (1) do echo %%i  --枚舉d/backup目錄

格式:FOR /D %variable IN (set) DO command [command-parameters]   
參數 /F (使用文件解析來處理命令輸出、字符串及文件內容。)
這個參數主要用於目錄搜索,不會搜索文件,/D 參數只能顯示當前目錄下的目錄名字。(TTT特別說明:只會搜索指定目錄下的目錄,不會搜索再下一級的目錄。)  

tokens:它的作用就是當你通過delims將每一行分爲更小的元素時,由它來控制要取哪一個或哪幾個。

FOR 參數 %%變量名 IN (相關文件或命令) DO 執行的命令

<span style="color: rgb(255, 0, 0); font-family: Arial; font-size: 14px; line-height: 21px; widows: auto;"></span><div style="font-family: 微軟雅黑; font-size: 14px; line-height: 21px; widows: auto;"><span style="font-family:Arial;background-color: inherit;"><span style="color:#ff0000;background-color: inherit;">FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] </span><span style="color: rgb(51, 51, 51);">  </span><br style="background-color: inherit;" /></span></div><div style="font-family: 微軟雅黑; font-size: 14px; line-height: 21px; widows: auto;"><span style="font-family:Arial;background-color: inherit;"><span style="color:#4bacc6;background-color: inherit;">參數 /R (搜索指定路徑及所有子目錄中與set相符合的所有文件)</span><br style="background-color: inherit;" /></span></div><div style="font-family: 微軟雅黑; font-size: 14px; line-height: 21px; widows: auto;"><span style="font-family:Arial;background-color: inherit;"><span style="color:#4bacc6;background-color: inherit;">參數 /d (參數只能顯示當前目錄下的目錄名字)</span></span></div><span style="color: rgb(255, 0, 0); font-family: 宋體; font-size: 14px; line-height: 21px; widows: auto;">delims 用來告訴for每一行應該拿什麼作爲分隔符,默認的分隔符是空格和tab鍵</span>



學習時,主要是參考如下文章,也感謝他們的默默奉獻:

http://bbs.bathome.net/viewthread.php?tid=2899 

http://www.cnblogs.com/adforce/p/3282591.html 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章