1、常用批處理内部指令
指令的使用參數均可以通過command /? 來擷取,不在列舉,隻根據自己的使用,及自定義的常見使用做些描述,僅供參考。
注釋: rem ::
rem
::
與rem不同的是,::後的字元行在執行時不會回顯,無論是否打開指令行回顯,因為指令解釋器不認為他是一個有效的指令行,
另外,rem 可以用于config.sys 檔案中。
echo off 關閉回顯
@ 将這個符号放在批處理檔案中其它指令的前面,運作時将不顯示指令本身;與echo off 結合使用
@echo off 關閉此批處理檔案中指令的所有回顯。
cls 清屏
dos下指令的參數使用時不區分大小寫
pause 暫停
errorlevel 運作退出狀态 0/1
title 批處理腳本執行時cmd的擡頭顯示
color 設定批處理運作環境顔色 示例:color 0a 黑色 淡綠色 [第一個為背景,第二個則為前景]
mode 配置系統裝置 mode
mode con cols=113 line=15 & color 0a 此指令設定DOS視窗大小:15行,113列,背景色為黑色,前景為淡綠色
goto : [與if判斷語句結合使用]
if [not] string1 == string2 command
if [not] exist %path% command
if errorlevel 或 %errorlevel == 0 command
if /i %a% == %b% () else () ## /i 不區分大小寫 注意 else一定要與前括号在同一行,
如: if /i %a% == %b% (
) else ()
::判斷變量是否定義及定義變量是否為空
if defined var command 或 if not "var"=="" command
判斷數字的符号
EQU - 等于 ;NEQ 不等于 ;LSS 小于 ;LEQ 小于或等于 ;GTR 大于 ; GEQ 大于或等于
find查找指令
參數不區分大小寫;操作對象為檔案,不可對目錄執行查找操作;查找比對,列印包含有該字段的行。
/v 顯示所有未比對的行
因為find查找的對象是檔案,是以一般與 type結合使用,當然也可以通過 将要查找的檔案路徑放在檔案中,
借助for /f來實作一行一行讀取,再用find查找每個檔案。
call :label arguments
調用本檔案内指令段,相當于子程式。被調用的指令以标簽:label開頭,以指令goto :eof[要有空格]結尾
call :label運作完 标簽,傳回繼續運作,相當于調用函數的意思;但當遇到剛才的定義的标簽 仍然會繼續執行;
使用起來也不很友善,較合理的方式 就是條件判斷語句[if等] 與goto結合使用。
start
批處理調用外部程式的指令(在新新視窗中運作,批處理會繼續往下運作,不理會外部程式的運作狀況),如果直接
運作外部程式則必須等外部程式完成後才繼續 執行剩下的指令。
setlocal與變量延遲
setlocal enabledelayedexpansion
用 ! 感歎号 來取變量, %var% ---> !var!
attrib 顯示或更改檔案屬性
shift 更改批處理檔案中可替換參數的位置 [表示很少用]
pushd popd
cd /d d:\mp4 #更改目前目錄為d:\mp4
pushd c:\mp3 #儲存目前目錄,并切換目前目錄為c:\mp3
popd #恢複目前目錄為剛才儲存的d:\mp4
一般用處不大,在目前目錄名不确定時,并有些幫助, 但我感覺至少在切換目錄時 加上/d 一定可以正常切換
assoc ftype
檔案關聯,感覺這個搞破壞 比較合适;或者是做修複時
assoc 設定‘檔案擴充名’關聯,關聯到‘檔案類型’
ftype 設定'檔案類型'關聯,關聯到‘執行程式和參數’
指令字元串%0 或 %1被通過關聯調用的檔案名所代替。 %* 得到所有的參數, %2 得到第一個參數,%~n得到其餘所有以nth 參數打頭的參數;n 可以是從2到 9 的數字。
windows執行一個程式的過程,【安裝時先通過assoc 設定正确的 檔案擴充名 關聯,再通過ftype 設定檔案類型關聯,關聯到相應的執行程式和參數】
assoc與ftype 示例:
##顯示系統預設的,同樣【assoc .zip=HaoZip.zip ftype HaoZip.zip="C:\Program Files\HaoZip\HaoZip.exe" "%1" 就可以進行設定】
1
2
3
4
<code>C:\Users\liuyuan>assoc .zip</code>
<code> </code><code>.zip=HaoZip.zip</code>
<code> </code><code>C:\Users\liuyuan>ftype HaoZip.zip</code>
<code> </code><code>HaoZip.zip=</code><code>"C:\Program Files\HaoZip\HaoZip.exe"</code> <code>"%1"</code>
恢複:exefile的正确關聯
如果該關聯已經被破壞,可以運作command.com,再運作 ftype exefile="%1" %*
2、常用特殊符号
@ 指令行回顯屏蔽符
% 批處理變量引導符
引用變量用%var%,調用程式外部參數用%1到%9等
%0 批處理檔案本身, 包括完整的路徑和擴充名
%1 第一個參數 %9 第九個參數
|管道指令
^ 轉義字元 &
&& || 邏輯與 或
3、dos應用
1)for
for /d %%variable IN (set) do command
(set)相當于設定條件
通配符 * ?
* 任意N個字元, ?表示任意一個字元
5
6
7
8
9
10
11
12
13
14
<code>@echo off</code>
<code>color 0a</code>
<code>for</code> <code>/D %%i </code><code>in</code> <code>(c:\*) </code><code>do</code> <code>echo %%i</code>
<code>::遞歸顯示c:\abd目錄下以.txt和.html結尾的檔案輸出定向到 result.txt</code>
<code>for</code> <code>/R </code><code>"c:\abd"</code> <code>%%i </code><code>in</code> <code>(*.txt;*.html) </code><code>do</code> <code>if</code> <code>exist %%i echo %%i>> result.txt</code>
<code>::讀取結果中的每行,會自動忽略空白行 下例:排除以#開頭的行,以空格為分隔,并輸出第</code><code>1</code><code>,</code><code>2</code><code>字段。</code>
<code>for</code> <code>/F </code><code>"eol=# tokens=1,2 delims= "</code> <code>%%x </code><code>in</code> <code>(result.txt) </code><code>do</code> <code>( echo %%x,%%y)</code>
<code>rem </code><code>for</code> <code>/L %</code><code>var</code><code>iable IN (start,step,end) </code><code>do</code> <code>command</code>
<code>:: 從</code><code>1</code><code>開始,另開啟</code><code>5</code><code>個cmd視窗</code>
<code>for</code> <code>/L %%i </code><code>in</code> <code>(</code><code>1</code><code>,</code><code>1</code><code>,</code><code>5</code><code>) </code><code>do</code> <code>start cmd</code>
<code>::從</code><code>5</code><code>開始,每次減</code><code>1</code><code>,開啟</code><code>5</code><code>個cmd視窗</code>
<code>for</code> <code>/L %%i </code><code>in</code> <code>(</code><code>5</code><code>,-</code><code>1</code><code>,</code><code>1</code><code>) </code><code>do</code> <code>start cmd</code>
<code>echo.</code>
<code>pause</code>
注: /R [[drive:]path] 路徑不支援通配符
2)系統變量
取了幾個感覺 有用的:
%userdomain% 本地 傳回包含使用者帳戶的域的名稱
%username% 傳回目前登入的使用者的名稱
%userprofile% 本地 傳回目前使用者的配置檔案的位置
%windir% 系統 傳回作業系統目錄的位置
3)set
指派 set var=[string]
set /a
set /p path=請輸入:
echo %path%
替換
set %path:str1=str2% 這種替換 很有雞肋的感覺,不能在原檔案中直接替換,也許是我沒發現。
echo %path% 對檔案進行替換,還有通過輸出重定向的方式,汗。。。
截取
%a:~[m[,n]%
m為偏移量,n為截取長度
set a=bbs.verybat.cn
::偏移量為0,去掉最後的3個機關
set var1=%a:~0,-3%
echo var1=%var1%
::偏移量為1,從左邊開始截取3個機關
set var2=%a:~1,3%
echo var2=%var2%
pause
運作結果:
result: var1=bbs.verybat
var2=bs.
本文轉自 劉園 51CTO部落格,原文連結:http://blog.51cto.com/colynn/1317401