全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:16903
推到 Plurk!
推到 Facebook!

XP底下的DOS指令

尚未結案
mmx142857
一般會員


發表:4
回覆:2
積分:1
註冊:2004-12-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-05 23:07:18 IP:218.166.xxx.xxx 未訂閱
請問一下,如果作業系統是XP的話,外部指令要從哪邊引入呢 ? 我在批次檔裡用 choice 這個指令,都會出現說沒有此指令.
zilch
中階會員


發表:5
回覆:87
積分:78
註冊:2002-09-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-06 00:12:45 IP:218.167.xxx.xxx 未訂閱
Windows XP(2000)己經沒有這個指令了..... 不過把它從別的os(dos)複製過來 再設定相容不知是否可行?
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-06 12:42:26 IP:218.175.xxx.xxx 未訂閱
http://www.cfanclub.net/new_dnzs/20040821/20040821003.htm    教你製作批次檔案  (聞道長安)    2004-8-18 13:23:57                  批次檔案有時很有用,在咱們論壇最常用的可能是這個修復IE的批次檔案(不管IE問題多大,只要運行這個檔,一般都會有效果):
http://www.cfanclub.net/new_dnzs/040115001a.htm
    其次,解決2000、XP默認共用也有一種方法是作一個批次檔案加到“啟動”中。     副檔名是bat(在nt/2000/xp/2003下也可以是cmd)的檔就是批次檔案。    首先批次檔案是一個文字檔案,這個檔的每一行都是一條DOS命令(大部分時候就好象我們在DOS提示符下執行的命令行一樣),你可以使用DOS下的Edit或者Windows的記事本(notepad)等任何文字檔案編輯工具創建和修改批次檔案。    其次,批次檔案是一種簡單的程式,可以通過條件語句(if)和流程控制語句(goto)來控制命令運行的流程,在批次處理中也可以使用迴圈語句(for)來迴圈執行一條命令。當然,批次檔案的編程能力與C語言等編程語句比起來是十分有限的,也是十分不規範的。批次處理的程式語句就是一條條的DOS命令(包括內部命令和外部命令),而批次處理的能力主要取決於你所使用的命令。    第三,每個編寫好的批次檔案都相當於一個DOS的外部命令,你可以把它所在的目錄放到你的DOS搜索路徑(path)中來使得它可以在任意位置運行。一個良好的習慣是在硬碟上建立一個bat或者batch目錄(例如C:\BATCH),然後將所有你編寫的批次檔案放到該目錄中,這樣只要在path中設置上c:\batch,你就可以在任意位置運行所有你編寫的批次處理程式。    第四,在DOS和Win9x/Me系統下,C:盤根目錄下的AUTOEXEC.BAT批次檔案是自動運行批次檔案,每次系統啟動時會自動運行該檔,你可以將系統每次啟動時都要運行的命令放入該檔中,例如設置搜索路徑,調入滑鼠驅動和磁片緩存,設置系統環境變數等。下面是一個運行於Windows 98下的autoexec.bat的示例:
@ECHO OFF
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
LH SMARTDRV.EXE /X
LH DOSKEY.COM /INSERT
LH CTMOUSE.EXE
SET TEMP=D:\TEMP
SET TMP=D:\TEMP    批次處理的作用
簡單的說,批次處理的作用就是自動的連續執行多條命令。    這裏先講一個最簡單的應用:在啟動wps軟體時,每次都必須執行(>前面內容表示DOS提示符): 
C:\>cd wps 
C:\WPS>spdos
C:\WPS>py 
C:\WPS>wbx 
C:\WPS>wps 
如果每次用WPS之前都這樣執行一遍,您是不是覺得很麻煩呢?    好了,用批次處理,就可以實現將這些麻煩的操作簡單化,首先我們編寫一個runwps.bat批次檔案,內容如下:
@echo off
c:
cd\wps
spdos
py
wbx
wps
cd
以後,我們每次進入wps,只需要運行runwps這個批次檔案即可。    常用命令    echo、@、call、pause、rem(小技巧:用::代替rem)是批次檔案最常用的幾個命令,我們就從他們開始學起。 
echo 表示顯示此命令後的字元 
echo off 表示在此語句後所有運行的命令都不顯示命令行本身 
@與echo off相象,但它是加在每個命令行的最前面,表示運行時不顯示這一行的命令行(只能影響當前行)。 
call 調用另一個批次檔案(如果不用call而直接調用別的批次檔案,那麼執行完那個批次檔案後將無法返回當前檔並執行當前檔的後續命令)。 
pause 運行此句會暫停批次處理的執行並在螢幕上顯示Press any key to continue...的提示,等待用戶按任意鍵後繼續 
rem 表示此命令後的字元為解釋行(注釋),不執行,只是給自己今後參考用的(相當於程式中的注釋)。     例1:用edit編輯a.bat檔,輸入下列內容後存檔為c:\a.bat,執行該批次檔案後可實現:將根目錄中所有檔寫入 a.txt中,啟動UCDOS,進入WPS等功能。       批次檔案的內容為:         命令注釋:         @echo off           不顯示後續命令行及當前命令行
    dir c:\*.* >a.txt       將c盤文件列表寫入a.txt 
    call c:\ucdos\ucdos.bat    調用ucdos 
    echo 你好            顯示"你好" 
    pause              暫停,等待按鍵繼續 
    rem 準備運行wps         注釋:準備運行wps 
    cd ucdos            進入ucdos目錄 
    wps               運行wps       批次檔案的參數    批次檔案還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符“%”。     %[1-9]表示參數,參數是指在運行批次檔案時在檔案名後加的以空格(或者Tab)分隔的字串。變數可以從%0到%9,%0表示批次處理命令本身,其他參數字串用%1到%9順序表示。     例2:C:根目錄下有一批次檔案名為f.bat,內容為:
@echo off
format %1    如果執行C:\>f a:
那麼在執行f.bat時,%1就表示a:,這樣format %1就相當於format a:,於是上面的命令運行時實際執行的是format a:    例3:C:根目錄下一批次檔案名為t.bat,內容為:
@echo off
type %1 
type %2     那麼運行C:\>t a.txt b.txt 
%1 : 表示a.txt
%2 : 表示b.txt
於是上面的命令將順序地顯示a.txt和b.txt檔的內容。    特殊命令    if goto choice for是批次檔案中比較高級的命令,如果這幾個你用得很熟練,你就是批次檔案的專家啦。     一、if 是條件語句,用來判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式:     1、if [not] "參數" == "字串" 待執行的命令     參數如果等於(not表示不等,下同)指定的字串,則條件成立,運行命令,否則運行下一句。    例:if "%1"=="a" format a:    2、if [not] exist [路徑\]檔案名 待執行的命令 
如果有指定的檔,則條件成立,運行命令,否則運行下一句。    如: if exist c:\config.sys type c:\config.sys 
表示如果存在c:\config.sys檔,則顯示它的內容。    3、if errorlevel <數位> 待執行的命令     很多DOS程式在運行結束後會返回一個數位值用來表示程式運行的結果(或者狀態),通過if errorlevel命令可以判斷程式的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等於指定的數字,則條件成立,運行命令,否則運行下一句。    如if errorlevel 2 goto x2    二、goto 批次檔案運行到這裏將跳到goto所指定的標號(標號即label,標號用:後跟標準字串來定義)處,goto語句一般與if配合使用,根據不同的條件來執行不同的命令組。     如:    goto end     :end 
echo this is the end     標號用“:字串”來定義,標號所在行不被執行。     三、choice 使用此命令可以讓用戶輸入一個字元(用於選擇),從而根據用戶的選擇返回不同的errorlevel,然後於if errorlevel配合,根據用戶的選擇運行不同的命令。    注意:choice命令為DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。    choice的命令語法(該語法為Windows 2003中choice命令的語法,其他版本的choice的命令語法與此大同小異):    CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]    描述:
    該工具允許用戶從選擇列表選擇一個專案並返回所選項目的索引。    參數列表:
   /C    choices       指定要創建的選項列表。默認列表是 "YN"。       /N                  在提示符中隱藏選項列表。提示前面的消息得到顯示,
                       選項依舊處於啟用狀態。       /CS                 允許選擇分大小寫的選項。在默認情況下,這個工具
                       是不分大小寫的。       /T    timeout       做出默認選擇之前,暫停的秒數。可接受的值是從 0
                       到 9999。如果指定了 0,就不會有暫停,默認選項
                       會得到選擇。       /D    choice        在 nnnn 秒之後指定默認選項。字元必須在用 /C 選
                       項指定的一組選擇中; 同時,必須用 /T 指定 nnnn。       /M    text          指定提示之前要顯示的消息。如果沒有指定,工具只
                       顯示提示。       /?                  顯示幫助消息。       注意:
   ERRORLEVEL 環境變數被設置為從選擇集選擇的鍵索引。列出的第一個選
   擇返回 1,第二個選擇返回 2,等等。如果用戶按的鍵不是有效的選擇,
   該工具會發出警告響聲。如果該工具檢測到錯誤狀態,它會返回 255 的
   ERRORLEVEL 值。如果用戶按 Ctrl Break 或 Ctrl C 鍵,該工具會返回 0
   的 ERRORLEVEL 值。在一個批程式中使用 ERRORLEVEL 參數時,將參數降
   序排列。    示例:
   CHOICE /? 
   CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
   CHOICE /T 10 /C ync /CS /D y
   CHOICE /C ab /M "選項 1 請選擇 a,選項 2 請選擇 b。"
   CHOICE /C ab /N /M "選項 1 請選擇 a,選項 2 請選擇 b。"
   
如果我運行命令:CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
螢幕上會顯示:
確認請按 Y,否請按 N,或者取消請按 C。 [Y,N,C]?
   
   
例:test.bat的內容如下(注意,用if errorlevel判斷返回值時,要按返回值從高到低排列): 
@echo off 
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem 
if errotlevel 1 goto defrag     :defrag 
c:\dos\defrag 
goto end     :mem 
mem 
goto end     :end 
echo good bye     此批次處理運行後,將顯示“defrag,mem,end[D,M,E]?” ,用戶可選擇d m e ,然後if語句根據用戶的選擇作出判斷,d表示執行標號為defrag的程式段,m表示執行標號為mem的程式段,e表示執行標號為end的程式段,每個程式段最後都以goto end將程式跳到end標號處,然後程式將顯示good bye,批次處理運行結束。     四、for 迴圈命令,只要條件符合,它將多次執行同一命令。     語法:
對一組檔中的每一個檔執行某個特定命令。    FOR %%variable IN (set) DO command [command-parameters]      %%variable  指定一個單一字母可替換的參數。
  (set)      指定一個或一組檔。可以使用通配符。
  command    指定對每個檔執行的命令。
  command-parameters
             為特定命令指定參數或命令行開關。    例如一個批次檔案中有一行: 
for %%c in (*.bat *.txt) do type %%c     則該命令行會顯示當前目錄下所有以bat和txt為副檔名的檔的內容。    批次處理示例    1. IF-EXIST    1)    首先用記事本在C:\建立一個test1.bat批次檔案,檔內容如下: 
@echo off 
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT 
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist     然後運行它:
C:\>TEST1.BAT     如果C:\存在AUTOEXEC.BAT檔,那麼它的內容就會被顯示出來,如果不存在,批次處理就會提示你該檔不存在。    2)    接著再建立一個test2.bat檔,內容如下: 
@ECHO OFF 
IF EXIST \%1 TYPE \%1 
IF NOT EXIST \%1 ECHO \%1 does not exist     執行: 
C:\>TEST2 AUTOEXEC.BAT 
該命令運行結果同上。    說明: 
(1) IF EXIST 是用來測試檔是否存在的,格式為 
IF EXIST [路徑 檔案名] 命令 
(2) test2.bat檔中的%1是參數,DOS允許傳遞9個批參數資訊給批次檔案,分別為%1~%9(%0表示test2命令本身) ,這有點象編程中的實參和形參的關係,%1是形參,AUTOEXEC.BAT是實參。     3) 更進一步的,建立一個名為TEST3.BAT的檔,內容如下: 
@echo off
IF "%1" == "A" ECHO XIAO 
IF "%2" == "B" ECHO TIAN 
IF "%3" == "C" ECHO XIN     如果運行:
C:\>TEST3 A B C 
螢幕上會顯示:
XIAO
TIAN
XIN    如果運行:
C:\>TEST3 A B 
螢幕上會顯示
XIAO
TIAN     在這個命令執行過程中,DOS會將一個空字串指定給參數%3。     2、IF-ERRORLEVEL    建立TEST4.BAT,內容如下:
@ECHO OFF 
XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 檔拷貝失敗 
IF ERRORLEVEL 0 ECHO 成功拷貝檔     然後執行檔:
C:\>TEST4    如果檔拷貝成功,螢幕就會顯示“成功拷貝檔”,否則就會顯示“檔拷貝失敗”。     IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批次檔案是錯誤的:
@ECHO OFF 
XCOPY C:\AUTOEXEC.BAT D:\ 
IF ERRORLEVEL 0 ECHO 成功拷貝檔 
IF ERRORLEVEL 1 ECHO 未找到拷貝檔 
IF ERRORLEVEL 2 ECHO 用戶通過ctrl-c中止拷貝操作 
IF ERRORLEVEL 3 ECHO 預置錯誤阻止檔拷貝操作 
IF ERRORLEVEL 4 ECHO 拷貝過程中寫盤錯誤     無論拷貝是否成功,後面的:     未找到拷貝檔 
用戶通過ctrl-c中止拷貝操作 
預置錯誤阻止檔拷貝操作 
拷貝過程中寫盤錯誤    都將顯示出來。     以下就是幾個常用命令的返回值及其代表的意義: 
backup 
0 備份成功 
1 未找到備份檔案 
2 檔共用衝突阻止備份完成 
3 用戶用ctrl-c中止備份 
4 由於致命的錯誤使備份操作中止     diskcomp 
0 盤比較相同 
1 盤比較不同 
2 用戶通過ctrl-c中止比較操作 
3 由於致命的錯誤使比較操作中止 
4 預置錯誤中止比較     diskcopy 
0 盤拷貝操作成功 
1 非致命盤讀/寫錯 
2 用戶通過ctrl-c結束拷貝操作 
3 因致命的處理錯誤使盤拷貝中止 
4 預置錯誤阻止拷貝操作     format 
0 格式化成功 
3 用戶通過ctrl-c中止格式化處理 
4 因致命的處理錯誤使格式化中止 
5 在提示“proceed with format(y/n)?”下用戶鍵入n結束     xcopy 
0 成功拷貝檔 
1 未找到拷貝檔 
2 用戶通過ctrl-c中止拷貝操作 
4 預置錯誤阻止檔拷貝操作 
5 拷貝過程中寫盤錯誤     3、IF STRING1 == STRING2    建立TEST5.BAT,檔內容如下: 
@echo off 
IF "%1" == "A" FORMAT A:     執行: 
C:\>TEST5 A 
螢幕上就出現是否將A:盤格式化的內容。     注意:為了防止參數為空的情況,一般會將字串用雙引號(或者其他符號,注意不能使用保留符號)括起來。
如:if [%1]==[A] 或者 if %1*==A*    5、GOTO    建立TEST6.BAT,檔內容如下: 
@ECHO OFF 
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY 
GOTO _DONE
:_COPY 
COPY C:\AUTOEXEC.BAT D:\ 
:_DONE     注意: 
(1) 標號前是ASCII字元的冒號":",冒號與標號之間不能有空格。 
(2) 標號的命名規則與檔案名的命名規則相同。
(3) DOS支援最長八位元字元的標號,當無法區別兩個標號時,將跳轉至最近的一個標號。    6、FOR    建立C:\TEST7.BAT,檔內容如下: 
@ECHO OFF 
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C     運行: 
C:>TEST7    執行以後,螢幕上會將C:盤根目錄下所有以BAT、TXT、SYS為副檔名的檔內容顯示出來(不包括隱藏檔)。
 
系統時間:2024-04-27 1:51:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!