batæ¯dosä¸çæ¹å¤çæ件
.cmdæ¯ntå
æ ¸å½ä»¤è¡ç¯å¢çå¦ä¸ç§æ¹å¤çæ件
ä»æ´å¹¿ä¹çè§åº¦æ¥çï¼unixçshellèæ¬ä»¥åå
¶å®æä½ç³»ç»çè³åºç¨ç¨åºä¸ç±å¤å£³è¿è¡è§£éæ§è¡çææ¬ï¼é½å
·æä¸æ¹å¤çæ件ååç¸ä¼¼çä½ç¨ï¼èä¸åæ ·æ¯ç±ä¸ç¨è§£éå¨ä»¥è¡ä¸ºåä½è§£éæ§è¡ï¼è¿ç§ææ¬å½¢å¼æ´éç¨ç称è°æ¯èæ¬è¯è¨ãæ以ä»æ个ç¨åº¦åæï¼batch, unix shell, awk, basic, perl çèæ¬è¯è¨é½æ¯ä¸æ ·çï¼åªä¸è¿åºç¨çèå´å解éçå¹³å°åæä¸åèå·²ãçè³æäºåºç¨ç¨åºä»ç¶æ²¿ç¨æ¹å¤çè¿ä¸ç§°å¼ï¼èå
¶å
容åæ©å±åä¸dosçæ¹å¤çå´åå®å
¨ä¸åã
===================================
é¦å
æ¹å¤çæ件æ¯ä¸ä¸ªææ¬æ件ï¼è¿ä¸ªæ件çæ¯ä¸è¡é½æ¯ä¸æ¡DOSå½ä»¤ï¼å¤§é¨åæ¶å就好象æ们å¨DOSæ示符ä¸æ§è¡çå½ä»¤è¡ä¸æ ·ï¼ï¼ä½ å¯ä»¥ä½¿ç¨DOSä¸çEditæè
Windowsçè®°äºæ¬(notepad)çä»»ä½ææ¬æ件ç¼è¾å·¥å
·å建åä¿®æ¹æ¹å¤çæ件ã
==== 注 ===================
æ¹å¤çæ件ä¸å®å
¨å¯ä»¥ä½¿ç¨édoså½ä»¤ï¼çè³å¯ä»¥ä½¿ç¨ä¸å
·æå¯æ§è¡ç¹æ§çæ®éæ°æ®æ§æ件ï¼è¿ç¼äºwindowsç³»ç»è¿ä¸ªæ°å解éå¹³å°çæ¶å
¥ï¼ä½¿å¾æ¹å¤ççåºç¨è¶æ¥è¶"è¾¹ç¼å"ãæ以æ们讨论çæ¹å¤çåºè¯¥éå®å¨dosç¯å¢æè
å½ä»¤è¡ç¯å¢ä¸ï¼å¦åå¾å¤è§å¿µå设å®é½éè¦åæ¯è¾å¤§çåå¨ã
========================
å
¶æ¬¡ï¼æ¹å¤çæ件æ¯ä¸ç§ç®åçç¨åºï¼å¯ä»¥éè¿æ¡ä»¶è¯å¥(if)åæµç¨æ§å¶è¯å¥(goto)æ¥æ§å¶å½ä»¤è¿è¡çæµç¨ï¼å¨æ¹å¤çä¸ä¹å¯ä»¥ä½¿ç¨å¾ªç¯è¯å¥(for)æ¥å¾ªç¯æ§è¡ä¸æ¡å½ä»¤ãå½ç¶ï¼æ¹å¤çæ件çç¼ç¨è½åä¸Cè¯è¨çç¼ç¨è¯å¥æ¯èµ·æ¥æ¯ååæéçï¼ä¹æ¯ååä¸è§èçãæ¹å¤ççç¨åºè¯å¥å°±æ¯ä¸æ¡æ¡çDOSå½ä»¤ï¼å
æ¬å
é¨å½ä»¤åå¤é¨å½ä»¤ï¼ï¼èæ¹å¤ççè½å主è¦åå³äºä½ æ使ç¨çå½ä»¤ã
==== 注 ==================
æ¹å¤çæ件(batch file)ä¹å¯ä»¥ç§°ä¹ä¸ºæ¹å¤çç¨åº(batch program)ï¼è¿ä¸ç¹ä¸ç¼è¯åè¯è¨ææä¸åï¼å°±cè¯è¨æ¥è¯´ï¼æ©å±å为cæè
cppçæ件å¯ä»¥ç§°ä¹ä¸ºcè¯è¨æ件æè
cè¯è¨æºä»£ç ï¼ä½åªæç¼è¯è¿æ¥åçexeæ件æå¯ä»¥ç§°ä¹ä¸ºcè¯è¨ç¨åºãå 为æ¹å¤çæ件æ¬èº«æ¢å
·æææ¬çå¯è¯»æ§ï¼åå
·æç¨åºçå¯æ§è¡æ§ï¼è¿äºç§°è°ççéæ¯æ¯è¾æ¨¡ç³çã
===========================
第ä¸ï¼æ¯ä¸ªç¼å好çæ¹å¤çæ件é½ç¸å½äºä¸ä¸ªDOSçå¤é¨å½ä»¤ï¼ä½ å¯ä»¥æå®æå¨çç®å½æ¾å°ä½ çDOSæ索路å¾(path)ä¸æ¥ä½¿å¾å®å¯ä»¥å¨ä»»æä½ç½®è¿è¡ãä¸ä¸ªè¯å¥½çä¹ æ¯æ¯å¨ç¡¬çä¸å»ºç«ä¸ä¸ªbatæè
batchç®å½ï¼ä¾å¦C:\BATCHï¼ï¼ç¶åå°ææä½ ç¼åçæ¹å¤çæ件æ¾å°è¯¥ç®å½ä¸ï¼è¿æ ·åªè¦å¨pathä¸è®¾ç½®ä¸c:\batchï¼ä½ å°±å¯ä»¥å¨ä»»æä½ç½®è¿è¡ææä½ ç¼åçæ¹å¤çç¨åºã
==== 注 =====
纯以dosç³»ç»èè¨ï¼å¯æ§è¡ç¨åºå¤§çº¦å¯ä»¥ç»å为äºç±»ï¼ä¾ç
§æ§è¡ä¼å
级ç±é«å°ä½æååå«æ¯ï¼DOSKEYå®å½ä»¤ï¼é¢å
é©»çå
åï¼ï¼COMMAND.COMä¸çå
é¨å½ä»¤ï¼æ ¹æ®å
åçç¯å¢éæ¶è¿é©»å
åï¼ï¼ä»¥com为æ©å±åçå¯æ§è¡ç¨åºï¼ç±command.com ç´æ¥è½½å
¥å
åï¼ï¼ä»¥exeä½æ©å±åçå¯æ§è¡ç¨åºï¼ç±command.com éå®ä½åè½½å
¥å
åï¼ï¼ä»¥batä½æ©å±åçæ¹å¤çç¨åºï¼ç±command.com 解éåæï¼æ ¹æ®å
¶å
容æä¼å
级顺åºè°ç¨ç¬¬2ï¼3ï¼4ï¼5ç§å¯æ§è¡ç¨åºï¼åæä¸è¡ï¼æ§è¡ä¸è¡ï¼æ件æ¬èº«ä¸è½½å
¥å
åï¼
============
第åï¼å¨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
==== 注 =====
AUTOEXEC.BAT为DOSç³»ç»çèªå¨è¿è¡æ¹å¤çæ件ï¼ç±COMMAND.COMå¯å¨æ¶è§£éæ§è¡ï¼
èå¨Win9xç¯å¢ä¸ï¼ä¸ä»
å¢å æ¯æäº DOSSTART.BAT, WINSTART.BAT ç许å¤å
¶å®èªå¨è¿è¡çæ¹å¤çæ件ï¼å¯¹AUTOEXEC.BAT ä¹å¢å äº .DOS .W40 .BAK .OLD .PWS ç许å¤åä½ä»¥éåºå¤æçç¯å¢åå¤åçéæ±ã
==== willsort ç¼æ³¨ =============
以ä¸å
³äºå½ä»¤çåç±»ï¼æå¾å¤å¼å¾æ¨æ²çå°æ¹ã常ç¨å½ä»¤ä¸ç@æ¬ä¸æ¯å½ä»¤ï¼èdirãcopyçä¹å¾å¸¸ç¨çå½ä»¤å´æ²¡æåå
¥, èç¹æ®å½ä»¤ä¸ææå½ä»¤å¯¹ææ¥è¯´é½æ¯å¸¸ç¨å½ä»¤ã建议å°æ¹å¤çæå¼ç¨çå½ä»¤å为å
é¨å½ä»¤ãå¤é¨å½ä»¤ã第ä¸æ¹ç¨åºä¸ç±»ãèå
é¨å½ä»¤åå¤é¨å½ä»¤ä¸å«æä¸ç±»æ¯ä¸ç¨äºæ常ç¨äºæ¹å¤çä¸çå½ä»¤å¯ç§°ä¹ä¸º"æ¹å¤çå½ä»¤"ã
以ä¸æå½MS-DOS 6.22 帮å©ææ¡£ä¸å
³äº"æ¹å¤çå½ä»¤"çæåï¼å½ç¶ï¼å
¶ä¸æäºæ¦å¿µåå®ä¹å·²ç»æäºè½åäºã
æ¹å¤çå½ä»¤
æ¹å¤çæ件ææ¹å¤çç¨åºæ¯ä¸ä¸ªå
å«è¥å¹²MS-DOSå½ä»¤çæ£ææ件ï¼æ©å±å为.BATãå½å¨å½ä»¤æ示符ä¸æ²å
¥æ¹å¤çç¨åºçå称æ¶ï¼MS-DOSæç»æ§è¡æ¤æ¹å¤çç¨åºä¸çå½ä»¤ã
ä»»ä½å¨å½ä»¤æ示符ä¸å¯ä½¿ç¨çå½ä»¤é½å¯ç¨å¨æ¹å¤çç¨åºä¸ãæ¤å¤ï¼ä¸é¢MS-DOSå½ä»¤æ¯ä¸é¨å¨æ¹å¤çç¨åºä¸ä½¿ç¨çã
==========
常ç¨å½ä»¤
echoã@ãcallãpauseãrem(å°æå·§ï¼ç¨::代æ¿rem)æ¯æ¹å¤çæ件æ常ç¨çå 个å½ä»¤ï¼æ们就ä»ä»ä»¬å¼å§å¦èµ·ã
==== 注 ===========
é¦å
, @ ä¸æ¯ä¸ä¸ªå½ä»¤, èæ¯DOS æ¹å¤ççä¸ä¸ªç¹æ®æ 记符, ä»
ç¨äºå±è½å½ä»¤è¡åæ¾. ä¸é¢æ¯DOSå½ä»¤è¡ææ¹å¤çä¸å¯è½ä¼è§å°çä¸äºç¹æ®æ 记符:
CR(0D) å½ä»¤è¡ç»æ符
Escape(1B) ANSI转ä¹å符å¼å¯¼ç¬¦
Space(20) 常ç¨çåæ°çå®ç¬¦
Tab(09) ; = ä¸å¸¸ç¨çåæ°çå®ç¬¦
+ COPYå½ä»¤æ件è¿æ¥ç¬¦
* ? æ件éé
符
"" å符串çå®ç¬¦
| å½ä»¤ç®¡é符
< > >> æ件éå®å符
@ å½ä»¤è¡åæ¾å±è½ç¬¦
/ åæ°å¼å
³å¼å¯¼ç¬¦
: æ¹å¤çæ ç¾å¼å¯¼ç¬¦
% æ¹å¤çåéå¼å¯¼ç¬¦
å
¶æ¬¡, :: ç¡®å®å¯ä»¥èµ·å°rem ç注éä½ç¨, èä¸æ´ç®æ´ææ; ä½æ两ç¹éè¦æ³¨æ:
第ä¸, é¤äº :: ä¹å¤, ä»»ä½ä»¥ :å¼å¤´çå符è¡, å¨æ¹å¤çä¸é½è¢«è§ä½æ å·, èç´æ¥å¿½ç¥å
¶åçææå
容, åªæ¯ä¸ºäºä¸æ£å¸¸çæ å·ç¸åºå«, å»ºè®®ä½¿ç¨ goto ææ æ³è¯å«çæ å·, å³å¨ :åç´§è·ä¸ä¸ªéåæ¯æ°åçä¸ä¸ªç¹æ®ç¬¦å·.
第äº, ä¸rem ä¸åçæ¯, ::åçå符è¡å¨æ§è¡æ¶ä¸ä¼åæ¾, æ 论æ¯å¦ç¨echo onæå¼å½ä»¤è¡åæ¾ç¶æ, å 为å½ä»¤è§£éå¨ä¸è®¤ä¸ºä»æ¯ä¸ä¸ªææçå½ä»¤è¡, å°±æ¤ç¹æ¥ç, rem å¨æäºåºåä¸å°æ¯ :: æ´ä¸ºéç¨; å¦å¤, rem å¯ä»¥ç¨äº config.sys æ件ä¸.
=====================
echo 表示æ¾ç¤ºæ¤å½ä»¤åçå符
echo off 表示å¨æ¤è¯å¥åææè¿è¡çå½ä»¤é½ä¸æ¾ç¤ºå½ä»¤è¡æ¬èº«
@ä¸echo offç¸è±¡ï¼ä½å®æ¯å å¨æ¯ä¸ªå½ä»¤è¡çæåé¢ï¼è¡¨ç¤ºè¿è¡æ¶ä¸æ¾ç¤ºè¿ä¸è¡çå½ä»¤è¡ï¼åªè½å½±åå½åè¡ï¼ã
call è°ç¨å¦ä¸ä¸ªæ¹å¤çæ件ï¼å¦æä¸ç¨callèç´æ¥è°ç¨å«çæ¹å¤çæ件ï¼é£ä¹æ§è¡å®é£ä¸ªæ¹å¤çæ件åå°æ æ³è¿åå½åæ件并æ§è¡å½åæ件çåç»å½ä»¤ï¼ã
pause è¿è¡æ¤å¥ä¼æåæ¹å¤ççæ§è¡å¹¶å¨å±å¹ä¸æ¾ç¤ºPress any key to continue...çæ示ï¼çå¾
ç¨æ·æä»»æé®å继ç»
rem 表示æ¤å½ä»¤åçå符为解éè¡ï¼æ³¨éï¼ï¼ä¸æ§è¡ï¼åªæ¯ç»èªå·±ä»ååèç¨çï¼ç¸å½äºç¨åºä¸ç注éï¼ã
==== 注 =====
æ¤å¤çæè¿°è¾ä¸ºæ··ä¹±, ä¸å¦ç´æ¥å¼ç¨ä¸ªå½ä»¤çå½ä»¤è¡å¸®å©æ´ä¸ºæ¡ç
-------------------------
ECHO
å½ç¨åºè¿è¡æ¶ï¼æ¾ç¤ºæéèæ¹å¤çç¨åºä¸çæ£æãä¹å¯ç¨äºå
许æç¦æ¢å½ä»¤çåæ¾ã
å¨è¿è¡æ¹å¤çç¨åºæ¶ï¼MS-DOSä¸è¬å¨å±å¹ä¸æ¾ç¤ºï¼åæ¾ï¼æ¹å¤çç¨åºä¸çå½ä»¤ã
使ç¨ECHOå½ä»¤å¯å
³éæ¤åè½ã
è¯æ³
ECHO [ON|OFF]
è¥è¦ç¨echoå½ä»¤æ¾ç¤ºä¸æ¡å½ä»¤ï¼å¯ç¨ä¸è¿°è¯æ³ï¼
echo [message]
åæ°
ON|OFF
æå®æ¯å¦å
许å½ä»¤çåæ¾ãè¥è¦æ¾ç¤ºå½åçECHOç设置ï¼å¯ä½¿ç¨ä¸å¸¦åæ°çECHO
å½ä»¤ã
message
æå®è®©MS-DOSå¨å±å¹ä¸æ¾ç¤ºçæ£æã
-------------------
CALL
ä»ä¸ä¸ªæ¹å¤çç¨åºä¸è°ç¨å¦ä¸ä¸ªæ¹å¤çç¨åºï¼èä¸ä¼å¼èµ·ç¬¬ä¸ä¸ªæ¹å¤ççä¸æ¢ã
è¯æ³
CALL [drive:][path]filename [batch-parameters]
åæ°
[drive:][path]filename
æå®è¦è°ç¨çæ¹å¤çç¨åºçåååå
¶åæ¾å¤ãæ件åå¿
é¡»ç¨.BATä½æ©å±åã
batch-parameters
æå®æ¹å¤çç¨åºæéçå½ä»¤è¡ä¿¡æ¯ã
-------------------------------
PAUSE
æåæ¹å¤çç¨åºçæ§è¡å¹¶æ¾ç¤ºä¸æ¡æ¶æ¯ï¼æ示ç¨æ·æä»»æé®ç»§ç»æ§è¡ãåªè½å¨æ¹å¤
çç¨åºä¸ä½¿ç¨è¯¥å½ä»¤ã
è¯æ³
PAUSE
REM
å¨æ¹å¤çæ件æCONFIG.SYSä¸å å
¥æ³¨è§£ãä¹å¯ç¨REMå½ä»¤æ¥å±è½å½ä»¤ï¼å¨CONFIG.SYS
ä¸ä¹å¯ä»¥ç¨åå· ; 代æ¿REMå½ä»¤ï¼ä½å¨æ¹å¤çæ件ä¸åä¸è½æ¿ä»£ï¼ã
è¯æ³
REM [string]
åæ°
string
æå®è¦å±è½çå½ä»¤æè¦å
å«ç注解ã
=======================
ä¾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æ件çå
容ã
==== 注 ===============
åæ°å¨æ¹å¤çä¸ä¹ä½ä¸ºåéå¤ç, æ以åæ ·ä½¿ç¨ç¾åå·ä½ä¸ºå¼å¯¼ç¬¦, å
¶åè·0-9ä¸çä¸ä¸ªæ°åææåæ°å¼ç¨ç¬¦. å¼ç¨ç¬¦ååæ°ä¹é´ (ä¾å¦ä¸æä¸ç %1 ä¸ a: ) çå
³ç³»ç±»ä¼¼äºåéæéä¸åéå¼çå
³ç³». å½æ们è¦å¼ç¨ç¬¬åä¸ä¸ªææ´å¤ä¸ªåæ°æ¶, å°±å¿
须移å¨DOS çåæ°èµ·å§æé. shift å½ä»¤æ£å
å½äºè¿ä¸ªç§»å¨æéçè§è², å®å°åæ°çèµ·å§æé移å¨å°ä¸ä¸ä¸ªåæ°, 类似C è¯è¨ä¸çæéæä½. å¾ç¤ºå¦ä¸:
åå§ç¶æ, cmd 为å½ä»¤å, å¯ä»¥ç¨ %0 å¼ç¨
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
ç»è¿1次shiftå, cmd å°æ æ³è¢«å¼ç¨
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%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
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8
éæ¾çæ¯, win9x åDOSä¸åä¸æ¯æ shift çéæä½. åªæå¨ nt å
æ ¸å½ä»¤è¡ç¯å¢ä¸, shift ææ¯æ /n åæ°, å¯ä»¥ä»¥ç¬¬ä¸åæ°ä¸ºåºåè¿å¤ç§»å¨èµ·å§æé.
=================
ç¹æ®å½ä»¤
if goto choice foræ¯æ¹å¤çæ件ä¸æ¯è¾é«çº§çå½ä»¤ï¼å¦æè¿å ä¸ªä½ ç¨å¾å¾çç»ï¼ä½ å°±æ¯æ¹å¤çæ件çä¸å®¶å¦ã
ä¸ãif æ¯æ¡ä»¶è¯å¥ï¼ç¨æ¥å¤ææ¯å¦ç¬¦åè§å®çæ¡ä»¶ï¼ä»èå³å®æ§è¡ä¸åçå½ä»¤ã æä¸ç§æ ¼å¼:
1ãif [not] "åæ°" == "å符串" å¾
æ§è¡çå½ä»¤
åæ°å¦æçäº(not表示ä¸çï¼ä¸å)æå®çå符串ï¼åæ¡ä»¶æç«ï¼è¿è¡å½ä»¤ï¼å¦åè¿è¡ä¸ä¸å¥ã
ä¾ï¼if "%1"=="a" format a:
====
if çå½ä»¤è¡å¸®å©ä¸å
³äºæ¤ç¹çæ述为:
IF [NOT] string1==string2 command
å¨æ¤æ以ä¸å ç¹éè¦æ³¨æ:
1. å
å«å符串çåå¼å·ä¸æ¯è¯æ³æå¿
é¡»ç, èåªæ¯ä¹ æ¯ä¸ä½¿ç¨çä¸ç§"é²ç©º"å符
2. string1 æªå¿
æ¯åæ°, å®ä¹å¯ä»¥æ¯ç¯å¢åé, 循ç¯åé以åå
¶ä»å符串常éæåé
3. command ä¸æ¯è¯æ³æå¿
é¡»ç, string2 åè·ä¸ä¸ªç©ºæ ¼å°±å¯ä»¥ææä¸ä¸ªææçå½ä»¤è¡
=============================
2ãif [not] exist [è·¯å¾\]æ件å å¾
æ§è¡çå½ä»¤
å¦æææå®çæ件ï¼åæ¡ä»¶æç«ï¼è¿è¡å½ä»¤ï¼å¦åè¿è¡ä¸ä¸å¥ã
å¦: if exist c:\config.sys type c:\config.sys
表示å¦æåå¨c:\config.sysæ件ï¼åæ¾ç¤ºå®çå
容ã
****** 注 ********
ä¹å¯ä»¥ä½¿ç¨ä»¥ä¸çç¨æ³:
if exist command
device æ¯æDOSç³»ç»ä¸å·²å è½½ç设å¤, å¨win98ä¸é常æ:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
å
·ä½çå
容ä¼å 硬软件ç¯å¢çä¸åèç¥æå·®å¼, 使ç¨è¿äºè®¾å¤å称æ¶, éè¦ä¿è¯ä»¥ä¸ä¸ç¹:
1. 该设å¤ç¡®å®åå¨(ç±è½¯ä»¶èæç设å¤é¤å¤)
2. 该设å¤é©±å¨ç¨åºå·²å è½½(aux, prnçæ å设å¤ç±ç³»ç»ç¼ºçå®ä¹)
3. 该设å¤å·²åå¤å¥½(主è¦æ¯æa: b: ..., com1..., lpt1...ç)
å¯éè¿å½ä»¤ mem/d | find "device" /i æ¥æ£é
ä½ çç³»ç»ä¸æå è½½ç设å¤
å¦å¤, å¨DOSç³»ç»ä¸, 设å¤ä¹è¢«è®¤ä¸ºæ¯ä¸ç§ç¹æ®çæ件, èæ件ä¹å¯ä»¥ç§°ä½å符设å¤; å 为设å¤(device)ä¸æ件é½æ¯ä½¿ç¨å¥æ(handle)æ¥ç®¡çç, å¥æå°±æ¯åå, 类似äºæ件å, åªä¸è¿å¥æä¸æ¯åºç¨äºç£ç管ç, èæ¯åºç¨äºå
å管çèå·², æè°è®¾å¤å è½½ä¹å³æå¨å
åä¸ä¸ºå
¶åé
å¯å¼ç¨çå¥æ.
==================================
3ã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
æ´é«æç®æ´çç¨æ³, å¯ä»¥åèæåçå¦ä¸ç¯å
³äºè·å errorlevel çæç«
åºç°æ¤ç§ç°è±¡çåå æ¯, if errorlevel æ¯è¾è¿åç çå¤ææ¡ä»¶å¹¶éçäº, èæ¯å¤§äºçäº. ç±äº goto ç跳转ç¹æ§, ç±å°å°å¤§æåºä¼å¯¼è´å¨è¾å°çè¿åç å¤å°±è·³åº; èç±äº setå½ä»¤ç "éå¤" èµå¼ç¹æ§, ç±å¤§å°å°æåºä¼å¯¼è´è¾å°çè¿åç "è¦ç" è¾å¤§çè¿åç .
å¦å¤, è½ç¶ if errorlevel=<æ°å> command ä¹æ¯ææçå½ä»¤è¡, ä½ä¹åªæ¯ command.com 解éå½ä»¤è¡æ¶å° = ä½ä¸ºå½ä»¤è¡åå符è忽ç¥æç½¢äº
===========================
äºãgoto æ¹å¤çæ件è¿è¡å°è¿éå°è·³å°gotoææå®çæ å·(æ å·å³labelï¼æ å·ç¨:åè·æ åå符串æ¥å®ä¹)å¤ï¼gotoè¯å¥ä¸è¬ä¸ifé
å使ç¨ï¼æ ¹æ®ä¸åçæ¡ä»¶æ¥æ§è¡ä¸åçå½ä»¤ç»ã
å¦:
goto end
:end
echo this is the end
æ å·ç¨":å符串"æ¥å®ä¹ï¼æ å·æå¨è¡ä¸è¢«æ§è¡ã
==== willsort ç¼æ³¨
label 常被è¯ä¸º "æ ç¾" , ä½æ¯è¿å¹¶ä¸å
·æ广æ³ç约å®æ§.
goto ä¸ : èç¨å¯å®ç°æ§è¡ä¸éç跳转, åç»å if å¯å®ç°æ§è¡è¿ç¨çæ¡ä»¶åæ¯, å¤ä¸ª if å³å¯å®ç°å½ä»¤çåç», 类似 C ä¸ switch case ç»ææè
Basic ä¸ç select case ç»æ, 大è§æ¨¡ä¸ç»æåçå½ä»¤åç»å³å¯å®ç°é«çº§è¯è¨ä¸çå½æ°åè½. 以ä¸æ¯æ¹å¤çåC/Basicå¨è¯æ³ç»æä¸ç对ç
§:
Batch C / Basic
goto&: goto&:
goto&:&if if{}&else{} / if&elseif&endif
goto&:&if... switch&case / select case
goto&:&if&set&envar... function() / function(),sub()
==================================
ä¸ã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ã"
==== willsort ç¼æ³¨ ===============================
æååºwin98ä¸choiceçç¨æ³å¸®å©, å·²èµåºå
Waits for the user to choose one of a set of choices.
çå¾
ç¨æ·éæ©ä¸ç»å¾
éå符ä¸çä¸ä¸ª
CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]
/C[:]choices Specifies allowable keys. Default is YN
æå®å
许çæé®(å¾
éå符), é»è®¤ä¸ºYN
/N Do not display choices and ? at end of prompt string.
ä¸æ¾ç¤ºæ示å符串ä¸çé®å·åå¾
éå符
/S Treat choice keys as case sensitive.
å¤çå¾
éå符æ¶å¤§å°åææ
/T[:]c,nn Default choice to c after nn seconds
å¨ nn ç§åé»è®¤éæ© c
text Prompt string to display
è¦æ¾ç¤ºçæ示å符串
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被设置为ç¨æ·é®å
¥çå符å¨å¾
éå符ä¸çå移å¼
å¦ææè¿è¡å½ä»¤ï¼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 errorlevel 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为æ©å±åçæ件çå
容ã
==== willsort ç¼æ³¨ =====================================================
éè¦æåºçæ¯, å½()ä¸çå符串并éå个æå¤ä¸ªæ件åæ¶, å®å°å纯被å½ä½å符串æ¿æ¢, è¿ä¸ªç¹æ§åå ä¸()ä¸å¯ä»¥åµå
¥å¤ä¸ªå符串çç¹æ§, å¾ææ¾ for å¯ä»¥è¢«çä½ä¸ç§éåå循ç¯.
å½ç¶, å¨ nt/2000/xp/2003 ç³»åçå½ä»¤è¡ç¯å¢ä¸, for 被èµäºäºæ´å¤çç¹æ§, 使ä¹å¯ä»¥åæå½ä»¤è¾åºæè
æ件ä¸çå符串, ä¹æå¾å¤å¼å
³è¢«ç¨äºæ©å±äºæ件æ¿æ¢åè½.
========================================================================
æ¹å¤ç示ä¾
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æ¯å®åã
==== willsort ç¼æ³¨ =====================================================
DOS没æ "å
è®¸ä¼ é9个æ¹åæ°ä¿¡æ¯" çéå¶, åæ°ç个æ°åªä¼åå°å½ä»¤è¡é¿åº¦åæè°ç¨å½ä»¤å¤çè½åçéå¶. ä½æ¯, æ们å¨æ¹å¤çç¨åºä¸, å¨åä¸æ¶å»åªè½åæ¶å¼ç¨10个åæ°, å 为 DOSåªç»åºäº %0~%9è¿å个åæ°å¼ç¨ç¬¦.
========================================================================
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 ç¨æ·
温馨提示:答案为网友推荐,仅供参考