<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-199  評論-203  文章-11  trackbacks-0

    由于最近的項目用到批處理,所以轉載一篇bat 語法 命令的文章,權當備份,省略了若干不關鍵字句
    原文地址在這里:
    http://www.boofee.net/bigfee/read.php?94

    如何創建批處理文件?

    不要聽了批處理文件就感到很神氣,其實這東西很簡單的.你用過記事本沒有?用過? 好的.將記事本打開,什么都不用寫,然后選擇文件,保存.保存類型選擇所有文件,文件名則命名為?。産at 這個*代表是文件名,你可以隨便的起.保存好之后,看看你保存的地方,會出現一個白色窗口里有個黃色齒輪的圖標.這東西就是你創建的批處理文件,雙擊他就可以運行,但他現在由于里面沒有輸入任何命令,所以他運行了并不會做任何事情.當我們想往這個*.bat文件中添加東西時,只要右鍵選擇他,然后選擇編輯,就可以打開記事本往內輸入命令了.

    批處理文件中的命令是什么?

    批處理文件中的命令暫時先可以理解為dos命令,等稍后深入理解了以后再進行解釋.批處理顧名思義就是一大堆東西堆在一起處理.換句話說就是往里面寫一條條dos命令,然后按順序挨個執行,效果跟你在cmd里敲dos命令是一個效果.只不過用批處理寫好之后,要運行只要雙擊下就可以運行了.而不用再一遍一遍的重復的往里面打命令.這就是批處理文件的好處.

    除了運行dos命令之外,他還可以支持選擇結構if,循環結構for,goto等,與c有點類似,但遠沒有c全面,并且編寫語言十分不規范.

    批處理語法:

    先講個最基本的東西 @echo off

    echo的意思是回旋,這里的意思就是回顯,echo off意思就是關閉回顯.前面的@表示echo off 這一行也不會回顯你可以試著去掉@和整行去掉.@的另一個功能是在執行完批處理文件時自動恢復命令回顯。如果第一句用的是ECHO OFF,那么在執行完批處理文件以后不會顯示命令提示符。

    舉個例子:如果我們先創建一個1.bat文件,往里面輸入:

    dir 然后保存在c:\下.然后我們運行cmd,進入c盤根目錄下,輸入1.bat,則顯示:

    C:>dir
    驅動器 C 中的卷沒有標簽。
    卷的序列號是 0C5D-07FF

    C: 的目錄

    2004-08-25  00:45    <DIR>          WINDOWS
    2004-08-25  00:51    <DIR>          Documents and Settings

    ...........

    C:

    如果將1.bat內容修改成

    echo off

    dir

    然后再在cmd里輸入1.bat,則會顯示

    C:>echo off       //因為運行了echo off,所以沒有顯示dir命令,直接顯示了結果
    驅動器 C 中的卷沒有標簽。
    卷的序列號是 0C5D-07FF

    C: 的目錄

    2004-08-25  00:45    <DIR>          WINDOWS
    2004-08-25  00:51    <DIR>          Documents and Settings

    .....

    C:

    如果將1.bat文件修改成:

    @echo off
    dir

    則顯示成:

    C:>1.bat         //與前面不同,并沒有顯示echo off,原因是加了@,所以不顯示@后面的內容.又因為加/了echo off,所以后面的命令不顯示,直接顯示結果
    驅動器 C 中的卷沒有標簽。
    卷的序列號是 0C5D-07FF

    C: 的目錄

    2004-08-25  00:45    <DIR>          WINDOWS
    2004-08-25  00:51    <DIR>          Documents and Settings

    ....

    C:

    通過以上的比較,相信你對echo off命令已經充分掌握了.

    接下來講的是call命令:

    call 是打電話的call,而不是"喔靠"的靠:).call的意思為調用.假如有2個批處理文件a.bat和b.bat.如果我想運行a.bat的當中運行 b.bat.如何運行呢?其實很簡單,只要在a.bat文件中輸入call命令,則可以在a.bat運行的當中,運行b.bat,等b.bat運行完之后,繼續執行a.bat

    call命令格式:

    CALL [drive:][path]filename [batch-parameters]

     batch-parameters   指定批處理程序所需的命令行信息。

    舉例如下,我們在c盤根目錄下創建a.bat文件,內容為:

    echo this is a.bat

    call d:b.bat

    echo done

    然后在d盤根目錄下創建b.bat,內容為:

    echo this is b.bat

    保存后,打開cmd,進入c盤根目錄,然后輸入1.bat,顯示如下:

    C:>a.bat

    C:>echo this is a.bat
    this is a.bat

    C:>call d:b.bat

    C:>echo this is b.bat
    this is b.bat

    C:>echo done
    done

    由例子很容易看出來,是先運行a.bat的內容,直到遇到call b.bat后,則調用b.bat,運行完b.bat后,再返回a.bat接著運行call b.bat后面的echo done語句,直至將a.bat的所有批處理命令運行完.

    注:里面有個[batch-parameters]里面的所指的參數是什么,知道的朋友能否告知,不勝感激.

    PAUSE 命令

    暫停批處理程序的執行并顯示一條消息,提示用戶按任意鍵繼續執行。只能在批處理程序中使用該命令。

    rem命令:

    表示此命令后的字符為解釋行(注釋),不執行,只是給自己今后參考用的(相當于程序中的注釋).

    同時你可以用兩個冒號來替代rem.如: ::等同于一個rem.但他們有個區別,就是用::作注釋的話他是不回顯的,即使你打echo on強制回顯也沒有同的.同時rem可以在config.sys中加注釋.

    語法: rem[commnet]

    批處理文件參數:

    有點變成基礎的人都知道函數有參數.批處理文件也有參數.

    我打個比方,希望能幫助沒有語言基礎的人也能看的非常明白. 

    我從例子里開始吧.首先在c盤根目錄下創建一個批處理文件 a.bat,里面輸入內容

    echo %1

    然后打開cmd,然后進入c盤根目錄.輸入:a "this is a canshu"

    得到結果如下:

    C:>a.bat "this is a test"

    C:>echo "this is a test"
    "this is a test"

    輸入的a "this is a canshu"中,a為新建的a.bat的文件名a(后面的.bat可寫也可不寫),而a后面的 "this is a canshu"這句話就是參數,寫在這的參數,在程序運行中就將參數自動放到批處理程序中去.那么放在什么位置呢?就是放在 %1的地方.

    看了例子,讓我們看看整個關于參數的定義如何:

    批處理文件還可以像C語言的函數一樣使用參數(相當于DOS命令的命令行參數),這需要用到一個參數表示符"%"。
    %[1-9]表示參數,參數是指在運行批處理文件時在文件名后加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數字符串用%1到%9順序表示。//我們上個程序的例子里就有%1,他就是參數,而輸入中"this is a test"作為參數就直接放到%1的位置,于是程序就變成了 echo "this is a test".

    再舉幾個例子幫助你理解:

    C:根目錄下一批處理文件名為b.bat,內容為:
    @echo off
    type %1     //type為dos中的輸出命令,可以用來輸出文本文件的內容,比如我們新建一個1.txt文件

    //里面輸入內容,保存.進cmd,如果輸入1.txt則看不了1.txt文件內容,但是如果我

    //想看怎么辦呢?這時候可以用type命令,只要在cmd里輸入type?。保畉xt就能顯示

    //1.txt文件中的內容了 
    type %2

    那么運行C:>b a.txt b.txt
    %1 : 表示a.txt
    %2 : 表示b.txt

    于是上面的批處理命令就變成了

    @echo off

    type a.txt

    type b.txt
    于是上面的命令將順序地顯示a.txt和b.txt文件的內容。

    沒有編程基礎的人可能要問,干什么要弄個參數???在后面加個參數多麻煩???直接往里面寫不就好了啊?!其實這樣想有對的方面也有錯的方面.還是舉個例子說明吧.

    第一步還是在c盤根目錄下新建一個批處理文件,我們取名仍為a.bat.往里面的內容輸入為:

    ping %1  //ping命令可以簡單理解為測試一臺機器開著還是沒有開,如果開著的話,他就回給你回送回應.

    然后進cmd,我們想測試下163的服務器是不是開著,則輸入a www.163.com

    對于知道ping命令的人,可以打ping進行檢查,但如果想ping的人不知道ping命令怎么用,那怎么辦???這時候你就可以把命令預先輸入到批處理文件中,保存好,然后讓不會用的人進cmd,運行你的批處理文件,文件名后面加上他要ping 的網站地址就行了.換句話說,他想ping?。保叮尘椭苯蛹樱保叮车木W址,想ping sina就直接加sina的網址.這樣只要輸入一個參數,而不用改程序本身,整個程序的通用性就大大提高了.

    這是對于一個簡單的ping命令,你或許覺得用參數不值得,還是直接改不就好了?。绻绦蛴泻芏鄺l,你一下找不到在哪改怎么辦???所以,不管你是菜哥,菜弟,菜姐,菜妹,只要運行下,輸入參數,結果自己就會出來,不用再象你一樣,考慮怎么編寫批處理文件.人家只要知道是輸入什么東西能讓批處理程序運行,而編寫的人則想的是如何讓不懂程序的人能運行程序.

    批處理參數就這么簡單,不知道你理解了沒有?但如果你想深一步了解批處理參數,可以接著往下看,如果不想深入了解,知道現在這么多也就夠了.

    以下粉紅色內容為網上資料.

    ====================================

    因為參數只有1%-9%,但當我們要引用第十個或更多個參數時, 就必須移動DOS 的參數起始指針. shift 命令正充當了這個移動指針的角色, 它將參數的起始指針移動到下一個參數, 類似C 語言中的指針操作. 圖示如下:

    初始狀態, cmd 為命令名, 可以用 %0 引用
    cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
    ^     ^       ^     ^      ^      ^      ^      ^      ^      ^
    &line;       &line;        &line;      &line;        &line;       &line;       &line;        &line;       &line;       &line;
    %0  %1    %2   %3   %4   %5   %6    %7   %8   %9

    經過1次shift后, cmd 將無法被引用
    cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
    ^     ^       ^     ^      ^      ^      ^      ^      ^      ^
    &line;       &line;        &line;      &line;        &line;       &line;       &line;        &line;       &line;       &line;
    %0  %1    %2   %3   %4   %5   %6    %7   %8   %9

    經過2次shift后, arg1也被廢棄, %9指向為空, 沒有引用意義
    cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
    ^     ^       ^     ^      ^      ^      ^      ^      ^      ^
    &line;       &line;        &line;      &line;        &line;       &line;       &line;        &line;       &line;       &line;
    %0  %1    %2   %3   %4   %5   %6    %7   %8   %9

    遺憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 內核命令行環境下, shift 才支持 /n 參數, 可以以第一參數為基準返復移動起始指針.
    =================

    if goto choice for高級語法

    if命令

    說得通俗點,if就相當于我們白話里的如果.

    舉個例子:如果a喜歡b,那么a就要娶b. 這句話翻譯成計算機語言就成了

    if a喜歡b a就要娶b.

    當然拉,計算機不可能理解a喜歡b,a就要娶b這兩句話,這里只是舉個例子讓你方便理解.

    if語句一共有3種模式,如下:


    IF [NOT] string1==string2 command
    IF [NOT] EXIST filename command
    IF [NOT] ERRORLEVEL number command

    NOT               指定只有條件為 false 的情況下, Windows XP 才應該執行該命令。

    ERRORLEVEL number 如果最后運行的程序返回一個等于或大于指定數字的退出編碼,指定條件為 true。

    string1==string2  如果指定的文字字符串匹配,指定條件為 true。

    EXIST filename    如果指定的文件名存在,指定條件為 true。

    command           如果符合條件,指定要執行的命令。如果指定的條件為 FALSE,命令后可跟一個執行 ELSE關鍵字后的命令的 ELSE 命令。

    我們先講解第一種:

    IF [NOT] string1==string2 command

    自然語句意思:如果string1==string2,那么執行command

    下面再舉個能實際應用的if語句.

    自然語句:如果輸入的參數為3,那么顯示"a=3"

    計算機語句:

    @echo off
    if "%1"=="3" echo "a=3"

    或者寫成

    @echo off
    if %1==3 echo "a=3"

    注意:當要測試的時候,因在cmd底下,輸入1.bat 3.因為這里用了是傳遞參數,具體看文章前部分"批處理文件參數".

    第二種:

    IF [NOT] EXIST filename command

    這條命令用語檢測文件是否存在.如果存在,執行command.如果不存在,則什么也不顯示.

    如:我們想檢查e盤根目錄下是否有一個叫2.txt的文件.如果存在,則顯示exist.如果不存在,則什么也不顯示.

    批處理命令如下:

    @echo off
    if exist e:2.txt echo "exist 2.txt"

    第三種:

    IF [NOT] ERRORLEVEL number command

    這個我引用點資料,感覺別人寫得更詳細,引用部分為粉色字部分:

    if errorlevel <數字> 待執行的命令

    很多DOS程序在運行結束后會返回一個數字值用來表示程序運行的結果(或者狀態),通過if errorlevel命令可以判斷程序的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等于指定的數字,則條件成立,運行命令,否則運行下一句。

    如if errorlevel 2 goto x2

    ==== 注 ===========
    返回值從大到小的順序排列不是必須的, 而只是執行命令為 goto 時的習慣用法, 當使用 set 作為執行命令時, 通常會從小到大順序排列, 比如需將返回碼置入環境變量, 就需使用以下的順序形式:

    if errorlevel 1 set el=1
    if errorlevel 2 set el=2
    if errorlevel 3 set el=3
    if errorlevel 4 set el=4
    if errorlevel 5 set el=5
    ...

    當然, 也可以使用以下循環來替代, 原理是一致的:
    for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e //此處為一個for循環,后面會繼續                        介紹到的,看不懂可以先跳過去

    if errorlevel 比較返回碼的判斷條件并非等于, 而是大于等于. 由于 goto 的跳轉特性, 由小到大排序會導致在較小的返回碼處就跳出; 而由于 set命令的 "重復" 賦值特性, 由大到小排序會導致較小的返回碼 "覆蓋" 較大的返回碼.

    另外, 雖然 if errorlevel=<數字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時將 = 作為命令行切分符而忽略掉罷了

    choice命令

    goto命令

    for命令

    for命令其實就是一個循環命令,如果我們想重復一個語句,就可以用for命令.通過for命令,可以控制循環的次數等.

    語法:

    FOR %variable IN (set) DO command [command-parameters]

     %variable  指定一個單一字母可替換的參數。
     (set)      指定一個或一組文件。可以使用通配符。
     command    指定對每個文件執行的命令。
     command-parameters
                為特定命令指定參數或命令行開關。

    在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable
    而不要用 %variable。變量名稱是區分大小寫的,所以 %i 不同于 %I.

    不知道你你看懂了沒有,其實還是很容易理解的,還是舉個例子吧.我想用type打印所有c盤根目錄下的bat文件和txt文件.dos底下命令就是 type?。産at?。?txt.先將該文件保存在c盤根目錄下,名稱為a.bat

    用for命令如下:

    for %%t in (*.bat *.txt) do type %%t

    %%t其實就是代表的一個參數,他的內容在in() 里面括號里的內容.也就是說這句話里的%%t就變成了*.bat *.txt了.do就是做的意思,執行type命令,而type后面是%%t,而%%t又是*.bat *.txt.所以原來這句命令的意思就變成了:

    type *.bat *.txt

    執行時進cmd,然后到c盤根目錄下輸入a.bat就可以打印出c盤根目錄下所有擴展名為.bat和.txt的文件內容了.

    這里要注意:in后面有個空格.

    在xp底下,for命令擴展名被起用因此for的功能變得更加強大.下面講一個真正的循環.


    FOR /L %variable IN (start,step,end) DO command [command-parameters]

       該集表示以增量形式從開始到結束的一個數字序列。
       因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生
       序列 (5 4 3 2 1)

    里面第一個1在start的位置,意思是起始位置,第2個1在step位置,英文意思是跨步,在這里面的意思是每次增量為1.后面的5在end的位置,意思是結束時的大小.

    這句話的意思就是從1(start)開始增加,每次增加1(step),一直到變到5(end)為止.

    這個有什么用呢?其實我感覺這個東西的用處還是很大的.舉個最簡單的例子,我們想重復回顯"i am the best"這句話,重復顯示10遍.那么for命令如下:

    for /L %%e in (1,1,10) do echo "i am the best"

    這時,cmd就會重復輸入"i am the best"10遍.

    ===============================================

    看完整篇文章了嗎?咳...我寫的不容易啊....

    現在不知道你對bat有了什么樣的理解,我現在的感覺就是bat就是dos命令的組合,你把dos命令全寫進bat命令,只要運行下bat就會挨個執行dos命令,這無疑提供了不少的方便。

    下面我再舉些實例.

    刪除默認共享:

    對于默認共享不知道你了解多少,反正留著是個隱患,現在唯一的辦法好象只能做個bat文件進行刪除.命令如下:

    net share ipc$ /delete
    net share admin$ /delete
    net share c$ /delete
    net share d$ /delete
    net share e$ /delete

    ……

    里面的c d e為你的盤符。如果你只有一個分區,那么寫到net share c$ /delete為止就可以了。如果你有n個分區,那么就挨個寫下去。

    net share d$ /delete
    net share e$ /delete

    net share f$ /delete

    net share g$ /delete……

    登陸到局域網的機器快捷方式(對方機器有密碼且為2000或以上系統)

    net use 2.168.0.1 [密碼] /user:[用戶名]
    explorer 2.168.0.1

    bat文件備份注冊表

    set regfile=%date%   //設置變量,下面出現%regfile%的都自動替換“當天date”

    if exist "%regfile%" goto end   //如果發現當天date命名的目錄,跳到文件尾。
    md temp       //建temp目錄


    call 1.bat      //調用1.bat
    del  1.bat         
    ren 2.bat 1.bat
    ren 3.bat 2.bat
    ren 4.bat 3.bat
    echo move  "%regfile%"  temp >4.bat  //寫 移動“當天date命名的目錄”到temp的bat文件  。

    md "%regfile%"   //建當天date命名的目錄
    cd "%regfile%"  //進入

    reg export hkcu hkcu.reg   //導出注冊表
    reg export hklm hklm.reg 
                                 //HKEY_CURRENT_USER  縮寫hkcu 。存放當前用戶個人數據
                                 //HKEY_LOCAL_MACHINE  縮寫hklm 。系統的核心數據
    cd..
    deltree /y  temp >nul        ////返回上級目錄  ,刪temp文件夾
    :end
    文章來自:老李的日志。源地址:http://www.dayanmei.com/blog.php/ID_860.htm

    posted on 2009-03-10 17:34 Werther 閱讀(563) 評論(0)  編輯  收藏 所屬分類: 18.Other
    主站蜘蛛池模板: 中文字幕亚洲综合精品一区| 免费人人潮人人爽一区二区| 亚洲毛片免费观看| 亚洲人成网站999久久久综合| 一个人免费高清在线观看| 亚洲熟妇av一区| 国产91免费在线观看| 4338×亚洲全国最大色成网站| 午夜在线亚洲男人午在线| 国产精品另类激情久久久免费| 亚洲AV无码国产在丝袜线观看| 亚洲精品精华液一区二区| av永久免费网站在线观看| 亚洲AV乱码久久精品蜜桃 | 日韩国产欧美亚洲v片| 国产在线98福利播放视频免费 | 一个人看的免费视频www在线高清动漫 | 亚洲综合小说另类图片动图| 我想看一级毛片免费的| 97亚洲熟妇自偷自拍另类图片 | 亚洲精品第一国产综合精品99| 免费的黄色网页在线免费观看| 亚洲美女在线国产| 99精品视频免费| 亚洲精品视频在线看| 最新久久免费视频| 亚洲综合网美国十次| 免费黄色app网站| 国产亚洲精品成人AA片| 免费国产a国产片高清| 亚洲国产成人无码AV在线| 亚洲日韩国产精品乱| 99re免费99re在线视频手机版| 亚洲男人在线无码视频| 91制片厂制作传媒免费版樱花 | 国产亚洲人成A在线V网站| 97人妻精品全国免费视频| 亚洲综合色一区二区三区| 日日噜噜噜噜夜夜爽亚洲精品| 99久久99久久精品免费看蜜桃| 特级aaaaaaaaa毛片免费视频|