DOS批处理高级教程(一) 批处理基础
前言
批處理主要是用于腳本的編寫, 是為了減少重復勞動力而建立的一個工具;。 DOS批處理已經慢慢淡出大家的視線,在windows中我們完全可以寫shell, python shell,(xx.sh, xx.py), 同樣可以用 C# 結合windows 自帶的 power shell ise 編寫.ps1腳本。 這都是可以的, 喜歡什么都是各自的自由。
第一章 批處理基礎
本章主要介紹批處理的常見命令的常見字段和符號; 在實際的例子中理解和學習, 對于每個出現的單詞、字段設計理念、能夠解決的問題等進行簡單初步的整理。
下面例子每個例子都會經過我自己的在win7 64中運行提供出代碼展示; 如果有字段不理解的可以參閱相關這一系列文章; 可以在文章的摘要中查閱字段的主要位置進行跳轉。如果確實有問題和不理解的地方可以在評論區留言, 或者發送郵件到 actanble@163.com.
第一節 常用批處理內部命令簡介
REM 和 ::
REM為注釋命令,一般用來給程序加上注解,該命令后的內容不被執行,但能回顯。
:: 也可以起注釋作用, 而且更簡潔有效; 但有兩點需要注意:
①任何以冒號:開頭的字符行, 在批處理中都被視作標號, 而直接忽略其后的所有內容。而標號分為有效和無效兩種。
有效標號:冒號后緊跟一個以字母數字開頭的字符串,goto語句可以識別。
無效標號:冒號后緊跟一個非字母數字的一個特殊符號,goto無法識別的標號。
無效可以起到注釋作用,所以 :: 常被用作注釋符號,其實 :+ 也可起注釋作用。
②與rem 不同的是, ::后的字符行在執行時不會回顯, 無論是否用echo on打開命令行回顯狀態, 因為命令解釋器不認為他是一個有效的命令行, 就此點來看, rem 在某些場合下將比 :: 更為適用; 另外, rem 可以用于 config.sys 文件中。
行內注釋格式:%注釋內容% (不常用,容易引起語法錯誤,慎用少用)
ECHO 和 @
echo 表示 “out>>” 相當于打印
@字符放在命令前將關閉該命令回顯,無論此時echo是否為打開狀態。
一般來說理解了就行了, 下面的9種用法場景簡單眼熟下, 右面會有很多實例強化練習。
@字符放在命令前將關閉該命令回顯,無論此時echo是否為打開狀態。
echo命令的作用列舉如下:
打開回顯或關閉回顯功能
格式:echo [{ on|off }]
如果想關閉“ECHO OFF”命令行自身的顯示,則需要在該命令行前加上“@”。
顯示當前ECHO設置狀態
>格式:echo輸出提示信息
格式:ECHO 信息內容
上述是ECHO命令常見的三種用法,也是大家熟悉和會用的,但作為DOS命令淘金者你還應該知道下面的技巧:
關閉DOS命令提示符
在DOS提示符狀態下鍵入ECHO OFF,能夠關閉DOS提示符的顯示使屏幕只留下光標,直至鍵入ECHO ON,提示符才會重新出現。輸出空行,即相當于輸入一個回車
格式:ECHO.
值得注意的是命令行中的“.”要緊跟在ECHO后面中間不能有空格,否則“.”將被當作提示信息輸出到屏幕。另外“.”可以用,:;”/[]+等任一符號替代。
命令ECHO.輸出的回車,經DOS管道轉向可以作為其它命令的輸入,比如echo.|time即相當于在TIME命令執行后給出一個回車。所以執行時系統會在顯示當前時間后,自動返回到DOS提示符狀態
答復命令中的提問
格式:ECHO 答復語|命令文件名
上述格式可以用于簡化一些需要人機對話的命令(如:CHKDSK/F;FORMAT Drive:;del .)的操作,它是通過DOS管道命令把ECHO命令輸出的預置答復語作為人機對話命令的輸入。下面的例子就相當于在調用的命令出現人機對話時輸入“Y”回車:
ECHO Y|CHKDSK/FECHO Y|DEL A :*.*建立新文件或增加文件內容
格式:ECHO 文件內容>文件名
ECHO 文件內容>>文件名
Example
ECHO @ECHO OFF>AUTOEXEC.BAT 建立自動批處理文件ECHO C:\CPAV\BOOTSAFE>>AUTOEXEC.BAT 向自動批處理文件中追加內容向打印機輸出打印內容或打印控制碼
格式:ECHO 打印機控制碼>PRN
ECHO 打印內容>PRN下面的例子是向M-1724打印機輸入打印控制碼。<Alt>156是按住Alt鍵在小鍵盤鍵入156,類似情況依此類推:
ECHO +156+42+116>PRN(輸入下劃線命令FS*t)ECHO PRN">+155@>PRN(輸入初始化命令ESC@)ECHO.>PRN(換行)使喇叭鳴響
ECHO ^G“^G”是在dos窗口中用Ctrl+G或Alt+007輸入,輸入多個^G可以產生多聲鳴響。使用方法是直接將其加入批處理文件中或做成批處理文件調用。
這里的“^G”屬于特殊符號的使用,請看本文后面的章節
PAUSE 暫停
暫停
ERRORLEVEL
echo %errorlevel% 每個命令運行結束,可以用這個命令行格式查看返回碼 用于判斷剛才的命令是否執行成功 默認值為0,一般命令執行出錯會設 errorlevel 為1 又編程經驗的都體檢西相當于return;TITLE 設置cmd窗口的標題
設置cmd窗口的標題,批處理編程常用。
title 新標題 #可以看到cmd窗口的標題欄變了
COLOR 設置cmd窗口前景和背景顏色
設置默認的控制臺前景和背景顏色。批處理編程常用。
COLOR[attr]
attr 指定控制臺輸出的顏色屬性
顏色屬性由兩個十六進制數字指定
color xy; 第一個x為背景,第二個y則為前景。
每個數字可以為以下任何值之一:
0 = 黑色 8 = 灰色
1 = 藍色 9 = 淡藍色
2 = 綠色 A = 淡綠色
3 = 湖藍色 B = 淡淺綠色
4 = 紅色 C = 淡紅色
5 = 紫色 D = 淡紫色
6 = 黃色 E = 淡黃色
7 = 白色 F = 亮白色
- *如果沒有給定任何參數,該命令會將顏色還原到 CMD.EXE 啟動時 的顏色。這個值來自當前控制臺窗口、/T 開關 或DefaultColor 注冊表值。
- 如果用相同的前景和背景顏色來執行 COLOR 命令,COLOR 命令 會將 ERRORLEVEL 設置為 1。
例如: “colorfc” 在亮白色上產生亮紅色
mode 配置系統設備
簡單通過命令來學習吧, 深入了解的話 直接mode /?
mode 和 color 的常用例子
mode con cols=113 lines=15 & color 9f上述代碼的意思是設置長寬的行列數 且 設置顏色。不加贅述。
GOTO 和 :
goto 一般和 :連用; goto就是跳轉的意思。
example: demo_goto.bat
FIND 在文件中搜索字符串
find /? 查詢用法即可, 這里不加贅述, 用到了再描述; 后面和 findstr 一起說
START 調用外部程序并任其在新窗口自行運行
批處理中調用外部程序的命令(該外部程序在新窗口中運行,批處理程序繼續往下執行,不理會外部程序的運行狀況),如果直接運行外部程序則必須等外部程序完成后才繼續執行剩下的指令
例:start explorer d:\ 調用圖形界面打開D盤
assoc 和 ftype
文件關聯, 詳情 commend /?
assoc 設置’文件擴展名’關聯,關聯到’文件類型’
ftype 設置’文件類型’關聯,關聯到’執行程序和參數’
pushd 和 popd
切換目錄與返回, 跟看電視的回看一樣的效果
pushd先保存當前目錄位置, 進入另外一個目錄; popd 會到以前的目錄
exanple:
@echo off c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夾 md d:\mp4 #在 D:\ 建立 mp4 文件夾 cd /d d:\mp4 #更改當前目錄為 d:\mp4,cd命令的/d參數可改變盤符。 pushd c:\mp3 #保存當前目錄,并切換當前目錄為 c:\mp3 popd #恢復當前目錄為剛才保存的 d:\mp4CALL 調用批處理程序或命令并等待其執行完畢
set aa=123456 set cmdstr=echo %aa% echo %cmdstr% call %cmdstr% pause '''本例中如果不用call,而直接運行%cmdstr%,將顯示結果%aa%,而不是123456'''shift
更改批處理文件中可替換參數的位置。
SHIFT [/n]
IF
IF 條件判斷語句,語法格式如下:
IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command后面實例中詳解
setlocal 與 變量延遲
@echo off set a=4 set a=5 & echo %a% pause ''' 結果:4 解說:為什么是4而不是5呢?在echo之前明明已經把變量a的值改成5了? 修改 a 為!%a%! 即可、 正在 & 后面延遲一下再打印到控制臺中而不是并行處理直接echo a了; '''ATTRIB 顯示或更改文件屬性
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]
例子: 實現建立文件夾autorun,然后將其設為存檔、系統、隱藏屬性。
md autorun attrib +a +s +h autorunfindstr 在文件中搜索字符串(find增強版)
后面再說、 聯機命令會講到, 也可以自己 findstr /? 查閱文檔進行試驗
date /t 和 time /t
date /t 直接顯示當前日期,可用來提取或顯示日期。time /t 直接顯示當前時間,可用來提取或顯示時間。第二節 常用特殊符號
符號是表達的基本形式; 一般在后面會用得特別多, 多寫幾個實例就差不多理解各自的簡單用法。 動起手來即可, 下面就簡單熟悉下了。
@ 命令行回顯屏蔽符
@echo off ; 可以達到所有命令均不回顯的要求
% 批處理變量引導符
這個百分號嚴格來說是算不上命令的,它只是批處理中的參數而已(多個%一起使用的情況除外,以后還將詳細介紹)。
引用變量用%var%,調用程序外部參數用%1至%9等等
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*為命令行傳遞給批處理的參數
%0 批處理文件本身,包括完整的路徑和擴展名
%1 第一個參數
%9 第九個參數
%* 從第一個參數開始的所有參數
參數%0具有特殊的功能,可以調用批處理自身,以達到批處理本身循環的目的,也可以復制和刪除文件自身等等。
例:最簡單的復制文件自身的方法
copy %0 d:\wind.bat小技巧:添加行內注釋 %注釋內容%(可以用作行內注釋,不能出現重定向符號和管道符號)
為什么這樣呢?此時“注釋內容”其實被當作變量,其值是空的,故只起注釋作用,不過這種用法容易出現語法錯誤,一般不用。
> 輸出重定向符
輸出重定向命令
這個字符的意思是傳遞并且覆蓋,他所起的作用是將運行的結果傳遞到后面的范圍(后邊可以是文件,也可以是默認的系統控制臺)
在NT系列命令行中,重定向的作用范圍由整個命令行轉變為單個命令語句,受到了命令分隔符&,&&,||和語句塊的制約限制。
比如:
使用命令:echo hello >1.txt將建立文件1.txt,內容為”hello “(注意行尾有一空格)
使用命令:echo> hello>1.txt將建立文件1.txt,內容為”hello“(注意行尾沒有空格)
>> 輸出重定向符
一般用作文本追加; 例如
name.bat 幫助你迅速找到速度最快的QQ服務器,從而遠離”從服務器中轉”那一痛苦的過程
<、>&、<& 重定向符
這三個命令也是管道命令,但>&、<&一般不常用,你只需要知道一下就ok了,當然如果想仔細研究的話,可以自己查一下資料。
&,將一個句柄的輸出寫入到另一個句柄的輸入中。
<&,剛好和>&相反,從一個句柄讀取輸入并將其寫入到另一個句柄輸出中。
<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。
exanple demo_resd.bat
| 命令管道符
格式:第一條命令 | 第二條命令 | 第三條命令…
與 Linux 的 | 用法一樣。
例子: 格式化 a 盤。
echo y|format a: /s /q /v:system^ 轉義字符
^是對特殊符號<,>,&的前導字符,在命令中他將以上3個符號的特殊功能去掉,僅僅只把他們當成符號而不使用他們的特殊意義。
& 組合命令(順序執行)
語法:第一條命令 & 第二條命令 [& 第三條命令…]
&、&&、||為組合命令,顧名思義,就是可以把多個命令組合起來當一個命令來執行。這在批處理腳本里是允許的,而且用的非常廣泛。因為批處理認行不認命令數目。
&& 組合命令(前面指令成功,才執行后面指令)
語法:第一條命令 && 第二條命令 [&& 第三條命令…]
用這種方法可以同時執行多條命令,當碰到執行出錯的命令后將不執行后面的命令,如果一直沒有出錯則一直執行完所有命令
這個命令和上邊的類似,但區別是,第一個命令失敗時,后邊的命令也不會執行.
|| 組合命令(前面指令失敗,才執行后面指令)
語法:第一條命令 || 第二條命令 [|| 第三條命令…]
用這種方法可以同時執行多條命令,當一條命令失敗后才執行第二條命令,當碰到執行正確的命令后將不執行后面的命令,如果沒有出現正確的命令則一直執行完所有命令;
提示:組合命令和重定向命令一起使用必須注意優先級, 管道命令的優先級高于重定向命令,重定向命令的優先級高于組合命令
問題:把C盤和D盤的文件和文件夾列出到a.txt文件中。看例:
dir c:\ && dir d:\ > a.txt這樣執行后a.txt里只有D盤的信息!為什么?因為組合命令的優先級沒有重定向命令的優先級高!所以這句在執行時將本行分成這兩部分:dir
c:\和dir d:\ > a.txt,而并不是如你想的這兩部分:dir c:\ && dir d:\和>
a.txt。要使用組合命令&&達到題目的要求,必須得這么寫:
這樣,依據優先級高低,DOS將把這句話分成以下兩部分:dir c:\ > a.txt和dir d:\ >>a.txt。
當然這里還可以利用 & 命令
“” 字符串界定符
雙引號允許在字符串中包含空格,進入一個特殊目錄可以用如下方法
cd "program files" cd progra~1 cd pro*以上三種方法都可以進入program files這個目錄
, 逗號
逗號相當于空格,在某些情況下“,”可以用來當做空格使用, 比如
dir,c:\
; 分號
分號,當命令相同時,可以將不同目標用;來隔離,但執行效果不變,如執行過程中發生錯誤,則只返回錯誤報告,但程序仍會執行。試試就知道了。
() 括號
小括號在批處理編程中有特殊的作用,左右括號必須成對使用,括號中可以包括多行命令,這些命令將被看成一個整體,視為一條命令行。
括號在for語句和if語句中常見,用來嵌套使用循環或條件語句,其實括號()也可以單獨使用,請看例子。
例:
命令:echo 1 & echo 2 & echo 3
可以寫成:
(
echo 1
echo 2
echo 3
)
上面兩種寫法效果一樣,這兩種寫法都被視為是一條命令行。
注意:這種多條命令被視為一條命令行時,如果其中有變量,就涉及到變量延遲的問題。
! 感嘆號
前面!val!已經描述過
批處理中可能會見到的其它特殊標記符:
碰到了, 查詢, 解決, 記載。
CR(0D) 命令行結束符
Escape(1B)
ANSI轉義字符引導符
Tab(09) ; = 不常用的參數界定符
COPY命令文件連接符
- ? 文件通配符
/ 參數開關引導符
: 批處理標簽引導符
后記
參考文章:
http://blog.csdn.net/lanbing510/article/details/7461073
本文地址:
http://blog.csdn.net/actanble/article/details/59127745
第一部分 基礎內容到這里就結束了。關于更深層的學習和熟悉 DOS 批處理可以繼續關注。
總結
以上是生活随笔為你收集整理的DOS批处理高级教程(一) 批处理基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高德地图 自定义marker
- 下一篇: 艾默生Ev3100变频器源码,汇编语言的