天天看點

說說批處理

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&gt;assoc  .zip</code>

<code> </code><code>.zip=HaoZip.zip</code>

<code> </code><code>C:\Users\liuyuan&gt;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 第九個參數

|管道指令

^ 轉義字元 &amp;

&amp;&amp; || 邏輯與 或

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&gt;&gt; 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