日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

简单批处理命令简介

發(fā)布時(shí)間:2024/4/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单批处理命令简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?http://baike.baidu.com/view/80110.htm

處理是一種簡(jiǎn)化的腳本語(yǔ)言,也稱作宏。它應(yīng)用于DOS和Windows系統(tǒng)中,它是由DOS或者Windows系統(tǒng)內(nèi)嵌的命令解釋器(通常是COMMAND. COM或者CMD.EXE)解

批處理文件圖標(biāo)

釋運(yùn)行。類似于Unix中的Shell腳本。批處理文件具有.bat或者.cmd的擴(kuò)展

批處理窗口

名,其最簡(jiǎn)單的例子,是逐行書寫在命令行中會(huì)用到的各種命令。更復(fù)雜的情況,需要使用if,for,goto等命令控制程序的運(yùn)行過(guò)程,如同C,Basic等中高級(jí)語(yǔ)言一樣。如果需要實(shí)現(xiàn)更復(fù)雜的應(yīng)用,利用外部程序是必要的,這包括系統(tǒng)本身提供的外部命令和第三方提供的工具或者軟件。批處理文件,或稱為批處理程序,是由一條條的DOS命令組成的普通文本文件,可以用記事本直接編輯或用DOS命令創(chuàng)建,也可以用DOS下的文本編輯器Edit.exe來(lái)編輯。在“命令提示”下鍵入批處理文件的名稱,或者雙擊該批處理文件,系統(tǒng)就會(huì)調(diào)用Cmd.exe運(yùn)行該批處理程序。一般情況下,每條命令占據(jù)一行;當(dāng)然也可以將多條命令用特定符號(hào)(如:&、&&、|、||等)分隔后寫入同一行中;還有的情況就是像if、for等較高級(jí)的命令則要占據(jù)幾行甚至幾十幾百行的空間。系統(tǒng)在解釋運(yùn)行批處理程序時(shí),首先掃描整個(gè)批處理程序,然后從第一行代碼開(kāi)始向下逐句執(zhí)行所有的命令,直至程序結(jié)尾或遇見(jiàn)exit命令或出錯(cuò)意外退出。

編輯本段簡(jiǎn)單批處理命令簡(jiǎn)介

echo 命令

  打開(kāi)回顯或關(guān)閉請(qǐng)求回顯功能,或顯示消息。如果沒(méi)有任何參數(shù),echo

批處理與聯(lián)機(jī)處理

命令將顯示當(dāng)前回顯設(shè)置。

  語(yǔ)法

  echo [{on|off}] [message]

  Sample:@echo off / echo hello world

  在實(shí)際應(yīng)用中我們會(huì)把這條命令和重定向符號(hào)(也稱為管道符號(hào),一般用> >> ^)結(jié)合來(lái)實(shí)現(xiàn)輸入一些命令到特定的文件中。

rem 命令

  注釋命令,類似于在C語(yǔ)言中的/*--------*/,它并不會(huì)被執(zhí)行,只是起一個(gè)注釋的作用,便于別人閱讀

  和你自己日后修改。

  :: 也具有rem的功能

  但::和rem還是有區(qū)別的,當(dāng)關(guān)閉回顯時(shí),rem和::后的內(nèi)容都不會(huì)顯示。

順序批處理

但是當(dāng)打開(kāi)回顯時(shí),rem和rem

  后的內(nèi)容會(huì)顯示出來(lái),然而::后的內(nèi)容仍然不會(huì)顯示。

  Rem Message

  Sample:@Rem Here is the description.

pause 命令

  暫停命令。運(yùn)行 Pause 命令時(shí),將顯示下面的消息:

  Press any key to continue. . .(或:請(qǐng)按任意鍵繼續(xù). . .)

  Sample:

  @echo off

  :begin

  copy G:*.* d:\back

  echo 請(qǐng)插入另一張光盤...

  pause

  goto begin

  在這個(gè)例子中,驅(qū)動(dòng)器 G 中磁盤上的所有文件均復(fù)制到d:\back中。顯示的注釋提示您將另一張光盤

  盤放入驅(qū)動(dòng)器 G 時(shí),pause 命令會(huì)使程序掛起,以便您更換光盤,然后按任意鍵繼續(xù)處理。

call 命令

  從一個(gè)批處理程序調(diào)用另一個(gè)批處理程序,并且不終止父批處理程序。call

批處理功能界面

命令接受用作調(diào)用目標(biāo)的

  標(biāo)簽。如果在腳本或批處理文件外使用 Call,它將不會(huì)在命令行起作用。

  語(yǔ)法

  call [[Drive:][Path] FileName ] [:label [arguments]]

  參數(shù)

  [Drive:}[Path] FileName

  指定要調(diào)用的批處理程序的位置和名稱。

start 命令

  調(diào)用外部程序,所有的DOS命令和命令行程序都可以由start命令來(lái)調(diào)用。

  如:start calc.exe即可打開(kāi)Windows的計(jì)算器。

  常用參數(shù):

  MIN 開(kāi)始時(shí)窗口最小化

  SEPARATE 在分開(kāi)的空間內(nèi)開(kāi)始 16 位 Windows 程序

  HIGH 在 HIGH 優(yōu)先級(jí)類別開(kāi)始應(yīng)用程序

  REALTIME 在 REALTIME 優(yōu)先級(jí)類別開(kāi)始應(yīng)用程序

  WAIT 啟動(dòng)應(yīng)用程序并等候它結(jié)束

  parameters 這些為傳送到命令/程序的參數(shù)

  執(zhí)行的應(yīng)用程序是 32-位 GUI 應(yīng)用程序時(shí),CMD.EXE 不等應(yīng)用程序

常見(jiàn)批處理案例

終止就返回命令提示。如果在命令

  腳本內(nèi)執(zhí)行,該新行為則不會(huì)發(fā)生。

goto 命令

  跳轉(zhuǎn)命令。程序指針跳轉(zhuǎn)到指定的標(biāo)簽,從標(biāo)簽后的第一條命令開(kāi)始繼續(xù)執(zhí)行批處理程序。

  語(yǔ)法:goto label (label是參數(shù),指定所要轉(zhuǎn)向的批處理程序中的行。)

  Sample:

  if {%1}=={} goto noparms

  if {%2}=={} goto noparms(如果這里的if、%1.%2你不明白的話,先跳過(guò)去,后面會(huì)有詳細(xì)的解釋

  。)

  @Rem check parameters if null show usage

  :noparms

  echo Usage: monitor.bat ServerIP PortNumber

  goto end

  標(biāo)簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個(gè):

選擇批處理

用來(lái)表示這個(gè)字母是標(biāo)簽,goto

  命令就是根據(jù)這個(gè):來(lái)尋找下一步跳到到那里。最好有一些說(shuō)明這樣你別人看起來(lái)才會(huì)理解你的意圖啊。

set 命令

  顯示、設(shè)置或刪除變量。

  顯示變量:set 或 set s 前者顯示批處理當(dāng)前已定義的所有變量及其值,后者顯示所有以s開(kāi)頭的變量及值。

  設(shè)置變量:set aa=abcd 此句命令便可向變量aa賦值abcd。如果變量aa已被定義,則aa的值被修改為abcd;若aa尚未定義,則此句命令即可定義新的變量aa,同時(shí)為變量aa賦予初始值abcd。

  刪除變量:set aa= 此句命令即可刪除變量aa。若變量aa已被定義,則刪除變量aa;若aa尚未定義,則此句命令無(wú)實(shí)質(zhì)意義。

  需要說(shuō)明的是,批處理中的變量是不區(qū)分類型的,不需要像C語(yǔ)言中的變量那樣還要區(qū)分int、float、char等。比如執(zhí)行set aa=345后,變量aa的值既可以被視為數(shù)字345,也可以被視為字符串345。

  set命令具有擴(kuò)展功能,如用作交互輸入、字符串處理、數(shù)值計(jì)算等,屬于高級(jí)命令范疇。

編輯本段批處理符號(hào)簡(jiǎn)介

回顯屏蔽 @

  表示不顯示@后面的命令,在入侵過(guò)程中(例如使用批處理來(lái)格式化敵人

批處理過(guò)程

的硬盤)自然不能讓對(duì)方看到你使用的命令啦。

  @用法舉例:通過(guò)運(yùn)行批處理文件對(duì)比pause和@pause命令即可明了@的效果。

重定向1 >與>>

  將輸出信息重定向到指定的設(shè)備或文件。系統(tǒng)默認(rèn)輸出到顯示器。

  如:echo aaaaa>a.txt 即可將本在顯示器上顯示的信息aaaaa輸出到文件a.txt中,屏幕上沒(méi)有任何顯示。如果文件a.txt本來(lái)已經(jīng)存在,該命令將首先擦除a.txt中的所有信息,然后寫入信息aaaaa;若a.txt本來(lái)就不存在,該命令即可新建一個(gè)a.txt文件,并寫入信息aaaaa。

  echo aaaaa>>a.txt 類似于echo aaaaa>a.txt。區(qū)別在于:如果a.txt本已存在,>a.txt會(huì)擦除a.txt中的原有內(nèi)容,而>>a.txt并不擦除原有內(nèi)容,僅在a.txt文件的末尾添加信息aaaaa。a.txt不存在時(shí),二者沒(méi)有差別。

重定向2 <

  將輸入信息來(lái)源重定向?yàn)橹付ǖ脑O(shè)備或文件。系統(tǒng)默認(rèn)從顯示器讀取輸入信息。

  重定向使用舉例:

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

  @echo off

  echo abcdefg——這是文件a.txt中的信息>a.txt

  echo 請(qǐng)任意輸入字符,以回車結(jié)束:

  set /p ifo=

  cls

  echo 【 從屏幕獲得的輸入信息 】

  echo %ifo%

  set /p ifo=<a.txt

  echo 【 從文件a.txt獲得的輸入信息 】

  echo %ifo%

  pause>nul

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

  讀者觀察命令與輸出即可體會(huì)到重定向的功能和效果。

管道符號(hào) |

  將管道符號(hào)前面命令的輸出結(jié)果重定向輸出到管道符號(hào)后面的命令中去,作為后面命令的輸入。使用格式為:command_1|command_2

  管道符號(hào)使用舉例:

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

  @echo off

  echo aaaa>a.txt

  del /p a.txt

  pause

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

  @echo off

  echo aaaa>a.txt

  echo y|del /p a.txt

  pause

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

  對(duì)比以上兩個(gè)批處理執(zhí)行結(jié)果,讀者即可明白管道符的用法和效果。

  需要說(shuō)明的是,上面del命令添加開(kāi)關(guān)/p只是為了讓讀者明白管道符號(hào)的使用方法,實(shí)際刪除文件時(shí)不加/p開(kāi)關(guān)即可實(shí)現(xiàn)無(wú)提示直接刪除。

轉(zhuǎn)義符 ^

  將特殊符號(hào)轉(zhuǎn)化為一般符號(hào),即剝離特殊符號(hào)的特殊地位。特殊符號(hào)指:| & > <

  比如,如果我們想輸出符號(hào)“>”,直接用命令 echo > 是不行的,必須修改為 echo ^> 。其余幾個(gè)特殊符號(hào)類似需要有同樣的處理。

  轉(zhuǎn)義字符使用舉例:

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

  @echo off

  echo aaaa>a.txt

  echo 第一句echo執(zhí)行完畢

  echo aaaa^>a.txt

  echo 第二句echo執(zhí)行完畢

  pause

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

  比較上面的兩句echo,第一句echo將信息aaaa輸出到了文件a.txt,而第二句echo則在直接屏幕上顯示出aaaa>a.txt

邏輯命令符

  邏輯命令符包括:&、&&、||

  &-它的作用是用來(lái)連接n個(gè)DOS命令,并把這些命令按順序執(zhí)行,而不管是否有命令執(zhí)行失敗;

  &&-當(dāng)&&前面的命令成功執(zhí)行時(shí),執(zhí)行&&后面的命令,否則不執(zhí)行;

  ||-當(dāng)||前面的命令失敗時(shí),執(zhí)行||后面的命令,否則不執(zhí)行。

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

  @echo off

  echo ^|^|

  reg add HKCU /v try /f||echo **失敗**

  reg add HKCU1 /v try /f||echo **成功**

  echo ^&^&

  reg delete HKCU /v try /f&&echo **成功**

  reg delete HKCU /v try /f&&echo **失敗**

  echo ^&

  reg delete HKCU /v try /f&echo **也許成功**

  reg delete HKCU /v try /f&echo **也許失敗**

  pause

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

  執(zhí)行reg add或reg delete后,系統(tǒng)會(huì)給出執(zhí)行結(jié)果;我們通過(guò)echo命令也給出了“執(zhí)行結(jié)果”。對(duì)比系統(tǒng)和我們自己給出的結(jié)果,既可以驗(yàn)證邏輯命令的判斷機(jī)理。

編輯本段常用DOS命令釋義

文件夾管理

  cd 顯示當(dāng)前目錄名或改變當(dāng)前目錄。

  md 創(chuàng)建目錄。

  rd 刪除一個(gè)目錄。

  dir 顯示目錄中的文件和子目錄列表。

  tree 以圖形顯示驅(qū)動(dòng)器或路徑的文件夾結(jié)構(gòu)。

  path 為可執(zhí)行文件顯示或設(shè)置一個(gè)搜索路徑。

  copy 復(fù)制文件和目錄樹(shù)。

文件管理

  type 顯示文本文件的內(nèi)容。

  copy 將一份或多份文件復(fù)制到另一個(gè)位置。

  del 刪除一個(gè)或數(shù)個(gè)文件。

  move 移動(dòng)文件并重命名文件和目錄。(Windows XP Home Edition中沒(méi)有)

  ren 重命名文件。

  replace 替換文件。

  attrib 顯示或更改文件屬性。

  find 搜索字符串。

  fc 比較兩個(gè)文件或兩個(gè)文件集并顯示它們之間的不同

網(wǎng)絡(luò)命令

  ping 進(jìn)行網(wǎng)絡(luò)連接測(cè)試、名稱解析

  ftp 文件傳輸

  net 網(wǎng)絡(luò)命令集及用戶管理

  telnet 遠(yuǎn)程登陸

  ipconfig顯示、修改TCP/IP設(shè)置

  msg 給用戶發(fā)送消息

  arp 顯示、修改局域網(wǎng)的IP地址-物理地址映射列表

系統(tǒng)管理

  at 安排在特定日期和時(shí)間運(yùn)行命令和程序

  shutdown立即或定時(shí)關(guān)機(jī)或重啟

  tskill 結(jié)束進(jìn)程

  taskkill結(jié)束進(jìn)程(比tskill高級(jí),但WinXPHome版中無(wú)該命令)

  tasklist顯示進(jìn)程列表(Windows XP Home Edition中沒(méi)有)

  sc 系統(tǒng)服務(wù)設(shè)置與控制

  reg 注冊(cè)表控制臺(tái)工具

  powercfg控制系統(tǒng)上的電源設(shè)置

  對(duì)于以上列出的所有命令,在cmd中輸入命令+/?即可查看該命令的幫助信息。如find /?

編輯本段語(yǔ)句結(jié)構(gòu)釋義

  類似于C語(yǔ)言,批處理也有它的語(yǔ)句結(jié)構(gòu)。批處理的語(yǔ)句結(jié)構(gòu)主要有選擇結(jié)構(gòu)(if語(yǔ)句)、循環(huán)結(jié)構(gòu)(for語(yǔ)句)等。

if語(yǔ)句(選擇結(jié)構(gòu))

  if語(yǔ)句實(shí)現(xiàn)條件判斷,包括字符串比較、存在判斷、定義判斷等。通過(guò)條件判斷,if語(yǔ)句即可以實(shí)現(xiàn)選擇功能。

  1.字符串比較

  if語(yǔ)句僅能夠?qū)蓚€(gè)字符(串)是否相同、先后順序進(jìn)行判斷等。其命令格式為:

  IF [not] string1 compare-op string2 command1 [else command2]

  其中,比較操作符compare-op有以下幾類:

  == - 等于

  EQU - 等于

  NEQ - 不等于

  LSS - 小于

  LEQ - 小于或等于

  GTR - 大于

  GEQ - 大于或等于

  選擇開(kāi)關(guān)/i則不區(qū)分字符串大小寫;選擇not項(xiàng),則對(duì)判斷結(jié)果進(jìn)行邏輯非。

  字符串比較示例:

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

  @echo off

  set str1=abcd1233

  set str2=ABCD1234

  if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)

  if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2)

  echo.

  set /p choice=是否顯示當(dāng)前時(shí)間?(y/n)

  if /i not %choice% EQU n echo 當(dāng)前時(shí)間是:%date% %time%

  pause>nul

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

  對(duì)于最后一個(gè)if判斷,當(dāng)我們輸入n或N時(shí)的效果是一樣的,都不會(huì)顯示時(shí)間。如果我們?nèi)∠_(kāi)關(guān)/i,則輸入N時(shí),依舊會(huì)顯示時(shí)間。

  另外請(qǐng)注意一下幾個(gè)細(xì)節(jié):1-echo str1^<str2和echo str1^>=str2;2-echo.。

  2.存在判斷

  存在判斷的功能是判斷文件或文件夾是否存在。其命令格式為:

  IF [NOT] EXIST filename command1 [else command2]

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

  @echo off

  if exist %0 echo 文件%0是存在的!

  if not exist %~df0 (

  echo 文件夾%~df0不存在!

  ) else echo 文件夾%~df0存在!

  pause>nul

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

  這里注意幾個(gè)地方:

  1-存在判斷既可以判斷文件也可以判斷文件夾;

  2-%0即代表該批處理的全稱(包括驅(qū)動(dòng)器盤符、路徑、文件名和擴(kuò)展類型);

  3-%~df0是對(duì)%0的修正,只保留了其驅(qū)動(dòng)器盤符和路徑,詳情請(qǐng)參考for /?,屬高級(jí)批處理范疇;

  4-注意if語(yǔ)句的多行書寫,多行書寫要求command1的左括號(hào)必須和if在同一行、else必須和command1的右括號(hào)同行、command2的左括號(hào)必須與else同行、command1和command2都可以有任意多行,即command可以是命令集。

  3.定義判斷

  定義判斷的功能是判斷變量是否存在,即是否已被定義。其命令格式為:

  IF [not] DEFINED variable command1 [else command2]

  存在判斷舉例:

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

  @echo off

  set var=111

  if defined var (echo var=%var%) else echo var尚未定義!

  set var=

  if defined var (echo var=%var%) else echo var尚未定義!

  pause>nul

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

  對(duì)比可知,"set var="可以取消變量,收回變量所占據(jù)的內(nèi)存空間。

  4.結(jié)果判斷

  masm %1.asm

  if errorlevel 1 pause & edit %1.asm

  link %1.obj

  先對(duì)源代碼進(jìn)行匯編,如果失敗則暫停顯示錯(cuò)誤信息,并在按任意鍵后自動(dòng)進(jìn)入編輯界面;否則用link程序連接生成的obj文件,這種用法是先判斷前一個(gè)命令執(zhí)行后的返回碼(也叫錯(cuò)誤碼,DOS程序在運(yùn)行完后都有返回碼),如果和定義的錯(cuò)誤碼符合(這里定義的錯(cuò)誤碼為1),則執(zhí)行相應(yīng)的操作(這里相應(yīng)的操作為pause & edit %1.asm部分)。

  另外,和其他兩種用法一樣,這種用法也可以表示否定。用否定的形式仍表達(dá)上面三句的意思,代碼變?yōu)?#xff1a;

  masm %1.asm

  if not errorlevel 1 link %1.obj

  pause & edit %1.asm

for語(yǔ)句(循環(huán)結(jié)構(gòu))

  for語(yǔ)句可以實(shí)現(xiàn)類似于C語(yǔ)言里面的循環(huán)結(jié)構(gòu),當(dāng)然for語(yǔ)句的功能要更強(qiáng)大一點(diǎn),通過(guò)不同的開(kāi)關(guān)可以實(shí)現(xiàn)更多的功能。for語(yǔ)句有多個(gè)開(kāi)關(guān),不同開(kāi)關(guān)將會(huì)實(shí)現(xiàn)不同的功能。

  1.無(wú)開(kāi)關(guān)

  無(wú)開(kāi)關(guān)的for語(yǔ)句能夠?qū)υO(shè)定的范圍內(nèi)進(jìn)行循環(huán),是最基本的for循環(huán)語(yǔ)句。其命令格式為:

  FOR %%variable IN (set) DO command

  其中,%%variable是批處理程序里面的書寫格式,在DOS中書寫為%variable,即只有一個(gè)百分號(hào)(%);set就是需要我們?cè)O(shè)定的循環(huán)范圍,類似于C語(yǔ)言里面的循環(huán)變量;do后面的command就是循環(huán)所執(zhí)行的命令,即循環(huán)體。

  無(wú)開(kāi)關(guān)for語(yǔ)句舉例:

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

  @echo off

  for %%i in (a,"b c",d) do echo %%i

  pause>nul

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

  2.開(kāi)關(guān)/L

  含開(kāi)關(guān)/L的for語(yǔ)句,可以根據(jù)set里面的設(shè)置進(jìn)行循環(huán),從而實(shí)現(xiàn)對(duì)循環(huán)次數(shù)的直接控制。其命令格式為:

  FOR /L %%variable IN (start,step,end) DO command

  其中,start為開(kāi)始計(jì)數(shù)的初始值,step為每次遞增的值,end為結(jié)束值。當(dāng)end小于start時(shí),step需要設(shè)置為負(fù)數(shù)。

  含開(kāi)關(guān)/L的for語(yǔ)句舉例(創(chuàng)建5個(gè)文件夾):

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

  @echo off

  for /l %%i in (1,2,10) do md %%i

  pause

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

  上例將新建5個(gè)文件夾,文件夾名稱依次為1.3.5.7.9??梢园l(fā)現(xiàn),%%i的結(jié)束值并非end的值10,而是不大于end的一個(gè)數(shù)。

  3.開(kāi)關(guān)/F

  含開(kāi)關(guān)/F的for語(yǔ)句具有最強(qiáng)大的功能,它能夠?qū)ψ址M(jìn)行操作,也能夠?qū)γ畹姆祷刂颠M(jìn)行操作,還可以訪問(wèn)硬盤上的ASCII碼文件,比如txt文檔等。其命令格式為:

  FOR /F ["options"] %%variable IN (set) DO command

  其中,set為("string"、'command'、file-set)中的一個(gè);options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一個(gè)或多個(gè)的組合。各選項(xiàng)的意義參見(jiàn)for /f。一般情況下,使用較多的是skip、tokens、delims三個(gè)選項(xiàng)。

  含開(kāi)關(guān)/F的for語(yǔ)句舉例:

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

  @echo off

  echo **No Options:

  for /f %%a in ("1,2,10") do echo a=%%a

  echo **Options tokens ^& delims:

  for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c

  pause

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

  @echo off

  echo 本文件夾里面的文件有:

  for /f "skip=5 tokens=3* delims= " %%a in ('dir') do (

  if not "%%a"=="<DIR>" if not "%%b"=="字節(jié)" if not "%%b"=="可用字節(jié)" echo %%b

  )

  pause

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

  @echo off

  echo 本文件夾里面的文件有:

  dir>c:\file.txt

  for /f "skip=5 tokens=3* delims= " %%a in (c:\file.txt) do (

  if not "%%a"=="<DIR>" if not "%%b"=="字節(jié)" if not "%%b"=="可用字節(jié)" echo %%b

  )

  del c:\file.txt

  pause

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

  對(duì)于后面的兩個(gè)例子,其中options里面的delims= 是可以刪除的,因?yàn)橹灰砑恿?F開(kāi)關(guān)系統(tǒng)就將delims的值默認(rèn)為空格。

  符號(hào)字符串中的最后一個(gè)字符星號(hào),

  那么額外的變量將在最后一個(gè)符號(hào)解析之后

  分配并接受行的保留文本。本例中也可以改為4,不過(guò)文件名中有空格的文件,只能顯示空格以前部分

  同時(shí)我們也看到了,for語(yǔ)句的do后面的command也是可以分行的,只需要保證command的左括號(hào)和do在同一行就可以了。

  4.開(kāi)關(guān)/D或/R

  含開(kāi)關(guān)/D或/R的for語(yǔ)句是與目錄或文件有關(guān)的命令,一般情況下很少使用。含開(kāi)關(guān)/R的命令有時(shí)候被用于通過(guò)遍歷文件夾來(lái)查找某一個(gè)文件或文件夾,故而列舉此例。

  含開(kāi)關(guān)/R的for語(yǔ)句舉例(文件夾遍歷):

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

  @echo off

  setlocal enabledelayedexpansion

  FOR /R d: %%i IN (.) DO (

  set dd=%%i

  set "dd=!dd:~0,-1!"

  echo !dd!

  )

  pause

  exit

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

  上例即可以羅列出D盤下的所有文件夾,其速度要比命令"tree d:"慢多了,不過(guò)其返回結(jié)果的實(shí)用性則遠(yuǎn)遠(yuǎn)超過(guò)了tree命令。

  一般情況下我們不推薦通過(guò)遍歷文件夾來(lái)查找文件,特別是在查找某些程序(比如QQ.exe)的位置時(shí)。推薦通過(guò)reg命令查找注冊(cè)表來(lái)查找QQ的路徑,以保證查找效率。

  上例中也出現(xiàn)了幾個(gè)新面孔,如setlocal、感嘆號(hào)等。其中,感嘆號(hào)其實(shí)就是變量百分號(hào)(%)的強(qiáng)化版。之所以要用!而不用%,是因?yàn)樵趂or循環(huán)中,當(dāng)一個(gè)變量被多次賦值時(shí),%dd%所獲取的僅僅是dd第一次被賦予的值;要想刷新dd的值,就必須首先通過(guò)命令"setlocal enabledelayedexpansion"來(lái)開(kāi)啟延遲變量開(kāi)關(guān),然后用!dd!來(lái)獲取dd的值。

  for語(yǔ)句是批處理里面功能最強(qiáng)大、使用最普遍卻又最難掌握的一套命令,這也是批處理菜鳥(niǎo)和批處理高手最明顯的一個(gè)分水嶺,一旦掌握了這套命令,那么你就離批處理達(dá)人不遠(yuǎn)了!

編輯本段字符串處理釋義

  批處理有著具有非常強(qiáng)大的字符串處理能力,其功能絕不低于C語(yǔ)言里面的字符串函數(shù)集。批處理中可實(shí)現(xiàn)的字符串處理功能有:截取字符串內(nèi)容、替換字符串特定字段、合并字符串、擴(kuò)充字符串等功能。下面對(duì)這些功能一一進(jìn)行講解。

1.截取字符串

  截取字符串可以說(shuō)是字符串處理功能中最常用的一個(gè)子功能了,能夠?qū)崿F(xiàn)截取字符串中的特定位置的一個(gè)或多個(gè)字符。舉例說(shuō)明其基本功能:

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

  @echo off

  set ifo=abcdefghijklmnopqrstuvwxyz0 12 3456789

  echo 原字符串(第二行為各字符的序號(hào)):

  echo %ifo%

  echo 1234567890 123 45678901234567890123456

  echo 截取前5個(gè)字符:

  echo %ifo:~0,5%

  echo 截取最后5個(gè)字符:

  echo %ifo:~-5%

  echo 截取第一個(gè)到倒數(shù)第6個(gè)字符:

  echo %ifo:~0,-5%

  echo 從第4個(gè)字符開(kāi)始,截取5個(gè)字符:

  echo %ifo:~3,5%

  echo 從倒數(shù)第14個(gè)字符開(kāi)始,截取5個(gè)字符:

  echo %ifo:~-14,5%

  pause

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

  當(dāng)然,上面的例子只是將字符串處理的基本功能展示出來(lái)了,還看不出字符串處理具體有什么用處。下面這個(gè)例子是對(duì)時(shí)間進(jìn)行處理。

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

  @echo off

  echo 當(dāng)前時(shí)間是:%time% 即 %time:~0,2%點(diǎn)%time:~3,2%分%time:~6,2%秒%time:~9,2%厘秒

  pause

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

2.替換字符串

  替換字符串,即將某一字符串中的特定字符或字符串替換為給定的字符串。舉例說(shuō)明其功能:

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

  @echo off

  set aa=偉大的中國(guó)!我為你自豪!

  echo 替換前:%aa%

  echo 替換后:%aa:中國(guó)=中華人民共和國(guó)%

  echo aa = %aa%

  set "aa=%aa:中國(guó)=中華人民共和國(guó)%"

  echo aa = %aa%

  pause

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

  對(duì)于上面的例子有一點(diǎn)說(shuō)明,對(duì)比兩個(gè)echo aa = %aa%可以發(fā)現(xiàn),如果要修改變量aa的內(nèi)容的話,就需要將修改結(jié)果“%aa:中國(guó)=中華人民共和國(guó)%”賦值給變量aa。上面的字符串截取也有著同樣的特點(diǎn)。

3.字符串合并

  其實(shí),合并字符串就是將兩個(gè)字符串放在一起就可以了。舉例說(shuō)明:

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

  @echo off

  set aa=偉大的中國(guó)!

  set bb=我為你自豪!

  echo %aa%%bb%

  echo aa=%aa%

  echo bb=%bb%

  set "aa=%aa%%bb%"

  echo aa=%aa%

  pause

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

  同樣,如果要改變變量aa的內(nèi)容的話,就需要將合并結(jié)果“%aa%%bb%”賦值給變量aa。

4.擴(kuò)充字符串

  “擴(kuò)充”這個(gè)詞匯來(lái)自于微軟自己的翻譯,意思就是對(duì)表示文件路徑的字符串進(jìn)行特殊的處理,具體功能羅列如下:

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

  ~I - 刪除任何引號(hào)("),擴(kuò)充 %I

  %~fI - 將 %I 擴(kuò)充到一個(gè)完全合格的路徑名

  %~dI - 僅將 %I 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)

  %~pI - 僅將 %I 擴(kuò)充到一個(gè)路徑

  %~nI - 僅將 %I 擴(kuò)充到一個(gè)文件名

  %~xI - 僅將 %I 擴(kuò)充到一個(gè)文件擴(kuò)展名

  %~sI - 擴(kuò)充的路徑只含有短名

  %~aI - 將 %I 擴(kuò)充到文件的文件屬性

  %~tI - 將 %I 擴(kuò)充到文件的日期/時(shí)間

  %~zI - 將 %I 擴(kuò)充到文件的大小

  %~$PATH:I - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充

  到找到的第一個(gè)完全合格的名稱。如果環(huán)境變量名

  未被定義,或者沒(méi)有找到文件,此組合鍵會(huì)擴(kuò)充到

  空字符串

  可以組合修飾符來(lái)得到多重結(jié)果:

  %~dpI - 僅將 %I 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)和路徑

  %~nxI - 僅將 %I 擴(kuò)充到一個(gè)文件名和擴(kuò)展名

  %~fsI - 僅將 %I 擴(kuò)充到一個(gè)帶有短名的完整路徑名

  %~dp$PATH:i - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充

  到找到的第一個(gè)驅(qū)動(dòng)器號(hào)和路徑。

  %~ftzaI - 將 %I 擴(kuò)充到類似輸出線路的 DIR

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

  以上內(nèi)容引用于for /?幫助信息。其中的I代表變量I,不過(guò)需要說(shuō)明的是,不是所有的變量都能夠進(jìn)行擴(kuò)充的,有兩個(gè)條件:1.該字符串代表一個(gè)文件路徑;2.變量要用%x來(lái)表示,x可取a-z A-Z 0-9共62個(gè)字符中的任意一個(gè)。舉例說(shuō)明:

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

  @echo off

  echo 正在運(yùn)行的這個(gè)批處理:

  echo 完全路徑:%0

  echo 去掉引號(hào):%~0

  echo 所在分區(qū):%~d0

  echo 所處路徑:%~p0

  echo 文件名:%~n0

  echo 擴(kuò)展名:%~x0

  echo 文件屬性:%~a0

  echo 修改時(shí)間:%~t0

  echo 文件大小:%~z0

  pause

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

  其中的%0是批處理里面的參數(shù),代表當(dāng)前運(yùn)行的批處理的完全路徑。類似的還有%1-%9,分別代表傳遞來(lái)的第1-9個(gè)參數(shù)。例子如下:

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

  @echo off

  set aa=C:\Windows\PPP\a.btx

  call :deal aaa %aa% "c c" ddd eee

  pause>nul

  exit

  :deal

  echo %%0 = %0

  echo %%1 = %1

  echo %%2 = %2

  echo %%3 = %3

  echo %%4 = %4

  echo %%5 = %5

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

  其中,變量aa在之前是不可以擴(kuò)充的,通過(guò)call命令并將aa作為參數(shù)傳遞給子函數(shù):deal,將aa變量轉(zhuǎn)換成了變量%1,即符合%x格式,從而可以進(jìn)行字符串?dāng)U充。

  至于%x中x取a-z A-Z的形式,可以復(fù)習(xí)一下for語(yǔ)句,for語(yǔ)句里面的變量就是用%x來(lái)表示的,因而可以直接進(jìn)行擴(kuò)充。

編輯本段數(shù)值計(jì)算簡(jiǎn)介

  批處理里面的數(shù)值計(jì)算功能較弱,只能夠進(jìn)行整型計(jì)算,忽略浮點(diǎn)數(shù)的小數(shù)部分;同時(shí)數(shù)值計(jì)算的范圍也受限于系統(tǒng)位數(shù),對(duì)于目前較為常見(jiàn)的32位機(jī)來(lái)說(shuō),數(shù)值計(jì)算能處理的數(shù)值范圍為0x80000000h~0x7FFFFFFFh,即-2147483648~+2147483647。

  數(shù)值計(jì)算需要使用set命令,具體格式為“set /a expression”。其中,expression代表計(jì)算表達(dá)式,計(jì)算表達(dá)式跟C語(yǔ)言里面的表達(dá)式基本上完全一致。set支持的運(yùn)算符也跟C語(yǔ)言里面的一樣,只是沒(méi)有了増一減一。set支持的運(yùn)算符及優(yōu)先級(jí)排序如下:

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

  () - 分組

  ! ~ - - 一元運(yùn)算符(邏輯非、按位非、取負(fù))

  * / % - 算數(shù)運(yùn)算符(乘、除得商、除得余數(shù),即取余)

  + - - 算數(shù)運(yùn)算符(加、減)

  << >> - 邏輯移位(左移一位、右移一位)

  & - 按位“與”

  ^ - 按位“異”

  | - 按位“或”

  = *= /= %= += -= - 賦值

  &= ^= |= <<= >>=

  , - 表達(dá)式分隔符(set可一次處理多個(gè)表達(dá)式)

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

  我們知道,批處理中取變量的值是需要用%或者!的,而在set /a 中,直接用變量名稱即可取得變量的值。另外,set支持八進(jìn)制(數(shù)字前綴0)、十進(jìn)制(數(shù)字無(wú)前綴)和十六進(jìn)制(數(shù)字前綴0x),且支持不同進(jìn)制之間的計(jì)算,如set /a a=123+0123+0x123,計(jì)算及顯示結(jié)果為十進(jìn)制。

編輯本段批處理概念方法簡(jiǎn)介

  學(xué)習(xí)有關(guān)批處理的一些比較瑣碎、但又比較有價(jià)值的一些知識(shí),運(yùn)用這些知識(shí)后,才有條件更好的實(shí)現(xiàn)的批處理的功能,并能使批處理擺脫黑白世界而顯得更加多姿多彩。

  (一)環(huán)境變量 所謂“環(huán)境變量”,實(shí)際上就是C語(yǔ)言里面的“變量”的意思。批處理的變量可以分為兩類,由系統(tǒng)定義的系統(tǒng)變量和由用戶根據(jù)需要自定義的用戶變量。

  【 1.系統(tǒng)變量 】

  批處理的一些變量是由操作系統(tǒng)事先定義好的,可以適用于任何批處理,我們稱這些特殊的變量為“系統(tǒng)變量”。系統(tǒng)變量有很多個(gè),包括硬件類、操作系統(tǒng)類、文件路徑類、系統(tǒng)時(shí)間類等。要查看所有的系統(tǒng)變量,請(qǐng)新打開(kāi)一個(gè)cmd窗口,輸入set回車即可。對(duì)幾個(gè)比較常用的變量解釋如下:

  ComputerName 計(jì)算機(jī)名,即右鍵 我的電腦--屬性--計(jì)算機(jī)名 選項(xiàng)卡中的“完整的計(jì)算機(jī)名稱”

  ComSpec cmd.exe完整路徑名

  HomeDrive 系統(tǒng)分區(qū)盤符,一般都是C盤,故而HomeDrive=C:

  Path 可執(zhí)行文件默認(rèn)搜索路徑。這個(gè)東東非常重要!待會(huì)兒?jiǎn)为?dú)講解…

  ProgramFiles 就是系統(tǒng)的Program Files的路徑啦,一般都是C:\Program Files,這就是安裝軟件時(shí)默認(rèn)的安裝路徑了

  Prompt 個(gè)性化設(shè)置cmd提示符的必備武器!不過(guò),我沒(méi)怎么用過(guò)~

  SystemDrive 包含系統(tǒng)根目錄的分區(qū),其實(shí)就是HomeDrive了

  SystemRoot 系統(tǒng)根目錄路徑,一般都是C:\WINDOWS

  Temp、Tmp 文件、程序等可使用的臨時(shí)目錄,默認(rèn)是C:\WINDOWS\Temp或Tmp。幾乎所有的程序在運(yùn)行時(shí)都會(huì)在這個(gè)目錄里面“臨時(shí)”寫入文件。一般情況下,程序?qū)懭氲呐R時(shí)文件都應(yīng)該被該程序刪除,可惜的是,大部分的程序都很健忘,導(dǎo)致這個(gè)文件夾占據(jù)的空間越來(lái)越大,自然也就使我們的系統(tǒng)增肥嘍。所以,我們要把它修改到其他分區(qū),并且時(shí)時(shí)的清理里面的臨時(shí)文件。

  UserName 當(dāng)前用戶名,即所登陸的賬戶名

  UserProfile 當(dāng)前用戶的配置目錄,一般都是C:\Documents and Settings\%UserName%。默認(rèn)情況下,我們的桌面就是這個(gè)目錄下面的“桌面”文件夾;我的文檔就是這個(gè)目錄下面的“My Documents”文件夾。所以啦,往桌面上或我的文檔里面放東西就是放到這個(gè)文件夾下面了,也就是放到C盤了,重裝系統(tǒng)時(shí)要覆蓋C盤內(nèi)容的,所以桌面上或我的文檔里面的東西當(dāng)然就會(huì)Gone with the Wind了~解決方法有兩個(gè),一是保持良好的習(xí)慣,不把重要文件放到這兩個(gè)地方;二是,修改默認(rèn)設(shè)置,將這兩個(gè)文件夾都移到其他分區(qū)。

  WinDir 操作系統(tǒng)路徑,其實(shí)就是SystemRoot了

(二)用戶變量

  編寫批處理程序時(shí),用戶根據(jù)需要自己定義的變量稱之為用戶變量。用戶變量類似于C語(yǔ)言里面的變量,僅僅在定義該變量的程序中有效。

  用戶變量由set命令定義,這是批處理中非常非常重要的一個(gè)操作,從而使set命令成為批處理里面使用頻率最高的幾個(gè)命令之一。關(guān)于set命令的使用,參考set /?,本教程也會(huì)在后面對(duì)其進(jìn)行講解。

  【 3.變量引用 】

  前面的幾節(jié)課里面,我們已經(jīng)看到了如何引用變量,即直接用變量名操作變量,通過(guò)"%"或"!"來(lái)獲取變量的值。其中,只有在for語(yǔ)句里面重復(fù)對(duì)同一變量多次賦值時(shí)才需要使用"!",并且在使用"!"調(diào)用變量時(shí),要首先“啟用延遲環(huán)境變量擴(kuò)充”,啟動(dòng)命令為:SetLocal EnableDelayedExpansion。另外需要說(shuō)明的是,“啟用延遲環(huán)境變量擴(kuò)充”后,所有的"!"都將被視為“取變量值”的特殊符號(hào),即使用"^!"也不能輸出符號(hào)"!"。若要輸出"!",則需要“停用延遲環(huán)境變量擴(kuò)充”,命令為:SetLocal DisableDelayedExpansion

  (三)參數(shù) 

  跟C語(yǔ)言類似,在調(diào)用函數(shù)或其他批處理時(shí)可能需要傳遞參數(shù)。批處理的參數(shù)傳遞分為直接和間接兩種傳遞參數(shù)的方法。

  【 1.直接傳遞 】

  直接傳遞參數(shù),即在使用call命令時(shí),不使用任何參數(shù),在子函數(shù)或子批處理里面直接對(duì)主函數(shù)(也稱父批處理)里面的變量進(jìn)行修改。這跟匯編語(yǔ)言里面的參數(shù)傳遞方式類似。

  直接傳遞參數(shù)舉例:

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

  @echo off

  setlocal enabledelayedexpansion

  set var=aCdehiM,?mnrstW y

  echo %var%

  call :deal

  setlocal disabledelayedexpansion

  set var=%var:?=!%

  echo %var%

  pause>nul

  exit

  :deal

  set tm=!var!

  set var=

  for %%i in (6,3,11,11,16,15,1,4,11,5,12,13,9,0,12,7,15,14,5,10,2,16,18,8) do (

  set var=!var!!tm:~%%i,1!

  )

  goto :eof

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

  可以發(fā)現(xiàn),當(dāng)我們把變量var作為參數(shù)賦予子函數(shù):deal后,子函數(shù)對(duì)var的值進(jìn)行了修改;當(dāng)子函數(shù)返回后,主函數(shù)里面的var的值就已經(jīng)是子函數(shù)里面var被修改后的值了。

  該例子中,使用了本節(jié)課前面講到的setlocal enabledelayedexpansion和setlocal disabledelayedexpansion,前者保證了var在for循環(huán)里面能夠根據(jù)我們的意愿進(jìn)行處理,后者保證了能夠正確輸出符號(hào)"!"。另外例子中還使用了命令set,利用set對(duì)字符串進(jìn)行了處理。還有一個(gè)地方使用了語(yǔ)句goto :eof,該語(yǔ)句相當(dāng)于C語(yǔ)言里面的return或匯編語(yǔ)言里面的RET,即子程序返回命令。需要說(shuō)明的是,當(dāng)子函數(shù)本身就在批處理文件的末尾的話,我們是可以省略這句話的,比如將此例的goto :eof刪除是不會(huì)產(chǎn)生任何影響的。

  【 2.間接傳遞 】

  間接傳遞參數(shù),即在使用call命令時(shí),在其后面添加參數(shù),形如call {[:label][ChildBatch]} Parameter1 Parameter2 ... ParameterN。這跟C語(yǔ)言里面?zhèn)鬟f參數(shù)的格式類似。不同于C語(yǔ)言,批處理中的子函數(shù)不需要定義形參,更不需要指定參數(shù)的個(gè)數(shù)。傳遞過(guò)來(lái)的參數(shù),在子函數(shù)或子批處理里面是以%1~%9的形式表示的,即%1~%9分別表示傳遞過(guò)來(lái)的第1~9個(gè)參數(shù)。

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

  @echo off

  call :deal aaa bbb "c c" ddd eee

  pause>nul

  exit

  :deal

  echo %%0 = %0

  echo %%1 = %1

  echo %%2 = %2

  echo %%3 = %3

  echo %%4 = %4

  echo %%5 = %5

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

  通過(guò)這個(gè)例子就可以清晰的看到%n參數(shù)表示法的用法。參數(shù)列表中包含空格的依舊要用雙引號(hào)(")引起來(lái);另外,也可以看到,%0已經(jīng)變成了子函數(shù)的標(biāo)號(hào)了,而不是父批處理的文件名全稱。

  【 3.區(qū)別 】

  這兩種參數(shù)傳遞方法本質(zhì)上是沒(méi)有區(qū)別的,形式上,直接傳遞直接對(duì)原變量進(jìn)行操作,丟失了原變量的值;間接傳遞則通過(guò)%n對(duì)原變量進(jìn)行了簡(jiǎn)單的備份,并且通用性更強(qiáng),即不限定原變量的名稱。另外,使用%n還有一個(gè)非常大的好處,就是可以通過(guò)%~*i來(lái)加強(qiáng)處理變量的能力。關(guān)于%~*i,詳細(xì)內(nèi)容參見(jiàn)for /?。

  針對(duì)二者的差別,可以根據(jù)情況決定使用哪種傳遞方式:

  --1.作為參數(shù)的變量名固定、且在子函數(shù)中不需要對(duì)其進(jìn)行備份的情況下,使用直接傳遞法;

  --2.若將子函數(shù)作為一個(gè)通用的程序模塊,以適應(yīng)于對(duì)不同變量的處理,或者作為參數(shù)的變量不需要備份時(shí),使用間接傳遞法。

  具體使用哪種方法,還需根據(jù)實(shí)際情況或使用習(xí)慣進(jìn)行選擇。

  (四)返回值 有些命令在執(zhí)行之后將會(huì)返回一定的錯(cuò)誤值(errorlevel),可以通過(guò)errorlevel的值判斷命令執(zhí)行的狀況。這點(diǎn)類似于C語(yǔ)言里面的exit(num),num就是錯(cuò)誤代碼。

  獲取返回值errorlevel的方法就是,在執(zhí)行命令后,立馬調(diào)用返回值errorlevel,如echo %errorlevel%或者if %errorlevel%==1等命令。

  errorlevel舉例:

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

  @echo off

  reg add HKCU /v try /f>nul

  reg delete HKCU /v try /f

  if errorlevel 0 (echo 刪除成功!) else (echo 刪除失敗!)

  reg delete HKCU /v try /f

  if %errorlevel%==0 (echo 刪除成功!) else (echo 刪除失敗!)

  pause>nul

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

  上面例子中,由于第一成功的刪除了注冊(cè)表,導(dǎo)致第二次因?yàn)檎也坏阶?cè)表而宣告失敗。同時(shí)我們也看到了errorlevel的使用方法,即if errorlevel 0和if %errorlevel%==0是一樣的。也許你注意到了,里面還有個(gè)笑臉呢~O(∩_∩)O哈哈~這就是ASCII碼啦,后面跟你講啊…

  一般情況下,程序或命令成功執(zhí)行時(shí),返回的errorlevel是0,錯(cuò)誤時(shí)返回1或更高的值。當(dāng)然,有些命令是沒(méi)有返回值的,這點(diǎn)需要注意。

  嗯,有沒(méi)有想起前面有個(gè)類似的東西啊?對(duì)了,那就是||和&&了,這兩個(gè)符號(hào)就是根據(jù)errorlevel的值來(lái)進(jìn)行邏輯判斷的~

  (五)用戶交互 

  批處理,黑框白字是它最著名的特征。雖然當(dāng)初DOS為人們使用計(jì)算機(jī)做出了莫大的貢獻(xiàn),但在Windows盛行的今天,人們已經(jīng)疏遠(yuǎn)并且懼怕那個(gè)黑色的窗口了。微軟為了讓先天有著批量處理“體力活”能力的DOS避免“冷酷”,便于接近,特意提供了幾個(gè)小命令,加強(qiáng)批處理的用戶交互功能。

  【 1.視窗 】

  首先我們要DIY它的窗口。使用命令:color、mode、msg。

  --1.設(shè)置窗口背景色和字體顏色by color。詳細(xì)內(nèi)容參見(jiàn)color /?。

  --2.設(shè)置窗口大小by "MODE CON [COLS=c] [LINES=n]",cols即寬度,lines即高度。

  --3.GUI交互窗口by msg。詳細(xì)內(nèi)容參見(jiàn)msg /?。

  視窗DIY舉例:

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

  @echo off

  set a=10

  set b=0

  :tex

  set /a a+=3

  set /a b+=1

  mode con cols=%a% lines=%b%

  if %a% lss 60 goto :tex

  echo O(∩_∩)O 圣誕快樂(lè) O(∩_∩)O

  set a=15,a6,2e,d0,34,8b,4f,9d,5e

  for %%i in (%a%) do (

  ping -n 2 127.1>nul

  color %%i

  )

  for %%i in (%a%,%a%) do (

  ping -n 1 127.1>nul

  color %%i

  )

  >>ms.txt echo */. . . * .

  >>ms.txt echo .\* . [] * __

  >>ms.txt echo */ . ./\~~~~~~~~~~~~'\. ^|

  >>ms.txt echo \* ,/,..,\,...........,\.

  >>ms.txt echo ^|^| ..▎# ▎田 田 ▎ ^| ▎

  >>ms.txt echo ^|^| ^&^&▎ ▎ ▎'^|'▎ o

  >>ms.txt echo ^|^| ##■■■■■■■■■■〓

  msg %username% /w /time:3600 <ms.txt

  del ms.txt

  pause

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

  【 2.聲音 】

  呵呵,是不是注意到了批處理沒(méi)有聲音吶?閑話不說(shuō),直接做實(shí)驗(yàn)吧 ^_^

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

  @echo off

  echo 做好準(zhǔn)備,響了啊!!

  pause

  cls

  echo

  echo 怎么樣?呵呵,刺激吧~

  pause

  cls

  mshta vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")(window.close)

  pause

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

  此處,這個(gè)就是調(diào)用vbs的方法:vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")

  speak 有人說(shuō)如果tts安裝了中文引擎是可以講中文的。

  其實(shí)不然我測(cè)試了一下只要打上拼音(一個(gè)字和一個(gè)字的拼音中間需要加空格)就可以說(shuō)中文啦~

  【 3.控制 】

  在運(yùn)行批處理的過(guò)程中,我們?nèi)绾胃深A(yù)批處理呢?呵呵,直接點(diǎn)叉叉就可以結(jié)束它了!嗯,不錯(cuò),不過(guò),太野蠻了~

  --1.暫停批處理:直接按鍵盤上的Pause鍵嘍

  --2.終止批處理:組合鍵Ctrl+C。不過(guò),有時(shí)候它好像響應(yīng)的不太積極啊…

(六)ASCII碼

  前面的例子中,我們已經(jīng)使用過(guò)一次ASCII碼了,也就是那個(gè)笑臉。ASCII碼是圖形化的符號(hào),可以用來(lái)點(diǎn)綴我們的批處理的。

  在cmd窗口中我們可以通過(guò)任意一個(gè)字符的ASCII碼來(lái)輸入該字符,比如Ctrl+G、Ctrl+N等,字母a-z對(duì)應(yīng)ASCII碼的97-122。對(duì)于ASCII碼大于26的字符,可以通過(guò)這個(gè)方法來(lái)輸入:按住Alt鍵不松,通過(guò)小鍵盤輸入ASCII碼的十進(jìn)制值,松開(kāi)Alt鍵即可。

編輯本段批處理文件的應(yīng)用

  批處理文件是將一系列命令按一定的順序集合為一個(gè)可執(zhí)行的文本文件,其擴(kuò)展名為BAT。

  1. REM

  REM 是個(gè)注釋命令一般是用來(lái)給程序加上注解的,該命令后的內(nèi)容在程序執(zhí)行的時(shí)候?qū)⒉粫?huì)被顯示和執(zhí)行。例:

  REM 你現(xiàn)在看到的就是注解,這一句將不會(huì)被執(zhí)行。在以后的例子中解釋的內(nèi)容都REM 會(huì)放在REM后面。請(qǐng)大家注意。

  2. ECHO

  ECHO 是一個(gè)回顯命令主要參數(shù)有OFF和 ON,一般用ECHO message來(lái)顯示一個(gè)特定的消息 。例:

  Echo off

  Rem 以上代表關(guān)閉回顯即不顯示所執(zhí)行的命令

  Echo 這個(gè)就是消息。

  Rem 以上代表顯示“這就是消息”這列字符

  執(zhí)行結(jié)果:

  C:\>ECHO.BAT

  這個(gè)就是消息。

  3. GOTO

  GOTO 即為跳轉(zhuǎn)的意思。在批處理中允許以“:XXX”來(lái)構(gòu)建一個(gè)標(biāo)號(hào)然后用GOTO :標(biāo)號(hào)直接來(lái)執(zhí)行標(biāo)號(hào)后的命令。例

  :LABEL

  REM 上面就是名為L(zhǎng)ABEL的標(biāo)號(hào)。

  DIR C:\

  DIR D:\

  GOTO LABEL

  REM 以上程序跳轉(zhuǎn)標(biāo)號(hào)LABEL處繼續(xù)執(zhí)行。

  4.CALL

  CALL 命令可以在批處理執(zhí)行過(guò)程中調(diào)用另一個(gè)批處理,當(dāng)另一個(gè)批處理執(zhí)行完后再繼續(xù)執(zhí)行原來(lái)的批處理。例:

  批處理2.BAT內(nèi)容如下:

  ECHO 這就是2的內(nèi)容

  批處理1.BAT內(nèi)容如下:

  ECHO 這是1的內(nèi)容

  CALL 2.BAT

  ECHO 1和2的內(nèi)容全部顯示完成

  執(zhí)行結(jié)果如下:

  C:\>1.BAT

  這是1的內(nèi)容

  這就是2的內(nèi)容

  1和2的內(nèi)容全部顯示完成

  5.PAUSE

  PAUSE 停止系統(tǒng)命令的執(zhí)行并顯示下面的內(nèi)容。例:

  C:\> PAUSE

  請(qǐng)按任意鍵繼續(xù) . . .

  6. IF

  IF 條件判斷語(yǔ)句,語(yǔ)法格式如下:

  IF [NOT] ERRORLEVEL number command

  IF [NOT] string1==string2 command

  IF [NOT] EXIST filename command

  說(shuō)明:

  [NOT] 將返回的結(jié)果取反值即“如果沒(méi)有”的意思。

  ERRORLEVEL 是命令執(zhí)行完成后返回的退出值

  Number 退出值的數(shù)字取值范圍0~255。判斷時(shí)值的排列順序應(yīng)該又大到小。返回的值大于或等于指定的值時(shí)條件成立。

  string1==string2 string1和string2都為字符的數(shù)據(jù),英文字符的大小寫將看做不同,這個(gè)條件中的等于號(hào)必須是2個(gè)(絕對(duì)相等),條件相等后即執(zhí)行后面的 command

  EXIST filename 為文件或目錄存在的意思。

  IF ERRORLEVEL這條語(yǔ)句必須放在某一個(gè)命令后面。執(zhí)行命令后由IF ERRORLEVEL來(lái)判斷命令的返回值。

?

?

===http://youkey.zhmy.com/archives/2008/146745.html

擴(kuò)展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批處理文件。

==== 注 =======================================
.bat是dos下的批處理文件
.cmd是nt內(nèi)核命令行環(huán)境的另一種批處理文件
從更廣義的角度來(lái)看,unix的shell腳本以及其它操作系統(tǒng)甚至應(yīng)用程序中由外殼進(jìn)行解釋執(zhí)行的文本,都具有與批處理文件十分相似的作用,而且同樣是由專用解釋器以行為單位解釋執(zhí)行,這種文本形式更通用的稱謂是腳本語(yǔ)言。所以從某個(gè)程度分析,batch, unix shell, awk, basic, perl 等腳本語(yǔ)言都是一樣的,只不過(guò)應(yīng)用的范圍和解釋的平臺(tái)各有不同而已。甚至有些應(yīng)用程序仍然沿用批處理這一稱呼,而其內(nèi)容和擴(kuò)展名與dos的批處理卻又完全不同。
===================================

首先批處理文件是一個(gè)文本文件,這個(gè)文件的每一行都是一條DOS命令(大部分時(shí)候就好象我們?cè)贒OS提示符下執(zhí)行的命令行一樣),你可以使用DOS下的Edit或者Windows的記事本(notepad)等任何文本文件編輯工具創(chuàng)建和修改批處理文件。

==== 注 ===================
批處理文件中完全可以使用非dos命令,甚至可以使用不具有可執(zhí)行特性的普通數(shù)據(jù)性文件,這緣于windows系統(tǒng)這個(gè)新型解釋平臺(tái)的涉入,使得批處理的應(yīng)用越來(lái)越"邊緣化"。所以我們討論的批處理應(yīng)該限定在dos環(huán)境或者命令行環(huán)境中,否則很多觀念和設(shè)定都需要做比較大的變動(dòng)。
========================

其次,批處理文件是一種簡(jiǎn)單的程序,可以通過(guò)條件語(yǔ)句(if)和流程控制語(yǔ)句(goto)來(lái)控制命令運(yùn)行的流程,在批處理中也可以使用循環(huán)語(yǔ)句(for)來(lái)循環(huán)執(zhí)行一條命令。當(dāng)然,批處理文件的編程能力與C語(yǔ)言等編程語(yǔ)句比起來(lái)是十分有限的,也是十分不規(guī)范的。批處理的程序語(yǔ)句就是一條條的DOS命令(包括內(nèi)部命令和外部命令),而批處理的能力主要取決于你所使用的命令。

==== 注 ==================
批處理文件(batch file)也可以稱之為批處理程序(batch program),這一點(diǎn)與編譯型語(yǔ)言有所不同,就c語(yǔ)言來(lái)說(shuō),擴(kuò)展名為c或者cpp的文件可以稱之為c語(yǔ)言文件或者c語(yǔ)言源代碼,但只有編譯連接后的exe文件才可以稱之為c語(yǔ)言程序。因?yàn)榕幚砦募旧砑染哂形谋镜目勺x性,又具有程序的可執(zhí)行性,這些稱謂的界限是比較模糊的。
===========================

第三,每個(gè)編寫好的批處理文件都相當(dāng)于一個(gè)DOS的外部命令,你可以把它所在的目錄放到你的DOS搜索路徑(path)中來(lái)使得它可以在任意位置運(yùn)行。一個(gè)良好的習(xí)慣是在硬盤上建立一個(gè)bat或者batch目錄(例如C:BATCH),然后將所有你編寫的批處理文件放到該目錄中,這樣只要在path中設(shè)置上c:atch,你就可以在任意位置運(yùn)行所有你編寫的批處理程序。

==== 注 =====
純以dos系統(tǒng)而言,可執(zhí)行程序大約可以細(xì)分為五類,依照?qǐng)?zhí)行優(yōu)先級(jí)由高到低排列分別是:DOSKEY宏命令(預(yù)先駐留內(nèi)存),COMMAND.COM中的內(nèi)部命令(根據(jù)內(nèi)存的環(huán)境隨時(shí)進(jìn)駐內(nèi)存),以com為擴(kuò)展名的可執(zhí)行程序(由command.com 直接載入內(nèi)存),以exe位擴(kuò)展名的可執(zhí)行程序(由command.com 重定位后載入內(nèi)存),以bat位擴(kuò)展名的批處理程序(由command.com 解釋分析,根據(jù)其內(nèi)容按優(yōu)先級(jí)順序調(diào)用第2,3,4,5種可執(zhí)行程序,分析一行,執(zhí)行一行,文件本身不載入內(nèi)存)
============

第四,在DOS和Win9x/Me系統(tǒng)下,C:盤根目錄下的AUTOEXEC.BAT批處理文件是自動(dòng)運(yùn)行批處理文件,每次系統(tǒng)啟動(dòng)時(shí)會(huì)自動(dòng)運(yùn)行該文件,你可以將系統(tǒng)每次啟動(dòng)時(shí)都要運(yùn)行的命令放入該文件中,例如設(shè)置搜索路徑,調(diào)入鼠標(biāo)驅(qū)動(dòng)和磁盤緩存,設(shè)置系統(tǒng)環(huán)境變量等。下面是一個(gè)運(yùn)行于Windows 98下的autoexec.bat的示例:
@ECHO OFF
PATH C:WINDOWS;C:WINDOWSCOMMAND;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系統(tǒng)的自動(dòng)運(yùn)行批處理文件,由COMMAND.COM啟動(dòng)時(shí)解釋執(zhí)行;
而在Win9x環(huán)境中,不僅增加支持了 DOSSTART.BAT, WINSTART.BAT 等許多其它自動(dòng)運(yùn)行的批處理文件,對(duì)AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等許多變體以適應(yīng)復(fù)雜的環(huán)境和多變的需求。
==== willsort 編注 =============
以下關(guān)于命令的分類,有很多值得推敲的地方。常用命令中的@本不是命令,而dir、copy等也很常用的命令卻沒(méi)有列入, 而特殊命令中所有命令對(duì)我來(lái)說(shuō)都是常用命令。建議將批處理所引用的命令分為內(nèi)部命令、外部命令、第三方程序三類。而內(nèi)部命令和外部命令中別有一類是專用于或常用于批處理中的命令可稱之為"批處理命令"。

以下摘錄MS-DOS 6.22 幫助文檔中關(guān)于"批處理命令"的文字,當(dāng)然,其中有些概念和定義已經(jīng)有些落后了。

批處理命令

批處理文件或批處理程序是一個(gè)包含若干MS-DOS命令的正文文件,擴(kuò)展名為.BAT。當(dāng)在命令提示符下敲入批處理程序的名稱時(shí),MS-DOS成組執(zhí)行此批處理程序中的命令。

任何在命令提示符下可使用的命令都可用在批處理程序中。此外,下面MS-DOS命令是專門在批處理程序中使用的。
==========

常用命令

echo、@、call、pause、rem(小技巧:用::代替rem)是批處理文件最常用的幾個(gè)命令,我們就從他們開(kāi)始學(xué)起。

==== 注 ===========
首先, @ 不是一個(gè)命令, 而是DOS 批處理的一個(gè)特殊標(biāo)記符, 僅用于屏蔽命令行回顯. 下面是DOS命令行或批處理中可能會(huì)見(jiàn)到的一些特殊標(biāo)記符:
CR(0D) 命令行結(jié)束符
Escape(1B) ANSI轉(zhuǎn)義字符引導(dǎo)符
Space(20) 常用的參數(shù)界定符
Tab(09) ; = 不常用的參數(shù)界定符
+ COPY命令文件連接符
* ? 文件通配符
"" 字符串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回顯屏蔽符
/ 參數(shù)開(kāi)關(guān)引導(dǎo)符
: 批處理標(biāo)簽引導(dǎo)符
% 批處理變量引導(dǎo)符

其次, :: 確實(shí)可以起到rem 的注釋作用, 而且更簡(jiǎn)潔有效; 但有兩點(diǎn)需要注意:
第一, 除了 :: 之外, 任何以 :開(kāi)頭的字符行, 在批處理中都被視作標(biāo)號(hào), 而直接忽略其后的所有內(nèi)容, 只是為了與正常的標(biāo)號(hào)相區(qū)別, 建議使用 goto 所無(wú)法識(shí)別的標(biāo)號(hào), 即在 :后緊跟一個(gè)非字母數(shù)字的一個(gè)特殊符號(hào).
第二, 與rem 不同的是, ::后的字符行在執(zhí)行時(shí)不會(huì)回顯, 無(wú)論是否用echo on打開(kāi)命令行回顯狀態(tài), 因?yàn)槊罱忉屍鞑徽J(rèn)為他是一個(gè)有效的命令行, 就此點(diǎn)來(lái)看, rem 在某些場(chǎng)合下將比 :: 更為適用; 另外, rem 可以用于 config.sys 文件中.
=====================

echo 表示顯示此命令后的字符
echo off 表示在此語(yǔ)句后所有運(yùn)行的命令都不顯示命令行本身
@與echo off相象,但它是加在每個(gè)命令行的最前面,表示運(yùn)行時(shí)不顯示這一行的命令行(只能影響當(dāng)前行)。
call 調(diào)用另一個(gè)批處理文件(如果不用call而直接調(diào)用別的批處理文件,那么執(zhí)行完那個(gè)批處理文件后將無(wú)法返回當(dāng)前文件并執(zhí)行當(dāng)前文件的后續(xù)命令)。
pause 運(yùn)行此句會(huì)暫停批處理的執(zhí)行并在屏幕上顯示Press any key to continue...的提示,等待用戶按任意鍵后繼續(xù)
rem 表示此命令后的字符為解釋行(注釋),不執(zhí)行,只是給自己今后參考用的(相當(dāng)于程序中的注釋)。
==== 注 =====
此處的描述較為混亂, 不如直接引用個(gè)命令的命令行幫助更為條理

-------------------------
ECHO

當(dāng)程序運(yùn)行時(shí),顯示或隱藏批處理程序中的正文。也可用于允許或禁止命令的回顯。

在運(yùn)行批處理程序時(shí),MS-DOS一般在屏幕上顯示(回顯)批處理程序中的命令。
使用ECHO命令可關(guān)閉此功能。

語(yǔ)法

ECHO [ON|OFF]

若要用echo命令顯示一條命令,可用下述語(yǔ)法:

echo [message]

參數(shù)

ON|OFF
指定是否允許命令的回顯。若要顯示當(dāng)前的ECHO的設(shè)置,可使用不帶參數(shù)的ECHO
命令。

message
指定讓MS-DOS在屏幕上顯示的正文。

-------------------

CALL

從一個(gè)批處理程序中調(diào)用另一個(gè)批處理程序,而不會(huì)引起第一個(gè)批處理的中止。

語(yǔ)法

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

參數(shù)

[drive:][path]filename
指定要調(diào)用的批處理程序的名字及其存放處。文件名必須用.BAT作擴(kuò)展名。


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

-------------------------------

PAUSE

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

語(yǔ)法

PAUSE


REM

在批處理文件或CONFIG.SYS中加入注解。也可用REM命令來(lái)屏蔽命令(在CONFIG.SYS
中也可以用分號(hào) ; 代替REM命令,但在批處理文件中則不能替代)。

語(yǔ)法

REM [string]

參數(shù)

string
指定要屏蔽的命令或要包含的注解。
=======================

例1:用edit編輯a.bat文件,輸入下列內(nèi)容后存盤為c:a.bat,執(zhí)行該批處理文件后可實(shí)現(xiàn):將根目錄中所有文件寫入 a.txt中,啟動(dòng)UCDOS,進(jìn)入WPS等功能。

  批處理文件的內(nèi)容為:         命令注釋:

    @echo off           不顯示后續(xù)命令行及當(dāng)前命令行
    dir c:*.* >a.txt       將c盤文件列表寫入a.txt
    call c:ucdosucdos.bat    調(diào)用ucdos
    echo 你好            顯示"你好"
    pause              暫停,等待按鍵繼續(xù)
    rem 準(zhǔn)備運(yùn)行wps         注釋:準(zhǔn)備運(yùn)行wps
    cd ucdos            進(jìn)入ucdos目錄
    wps               運(yùn)行wps  

批處理文件的參數(shù)

批處理文件還可以像C語(yǔ)言的函數(shù)一樣使用參數(shù)(相當(dāng)于DOS命令的命令行參數(shù)),這需要用到一個(gè)參數(shù)表示符"%"。

%[1-9]表示參數(shù),參數(shù)是指在運(yùn)行批處理文件時(shí)在文件名后加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數(shù)字符串用%1到%9順序表示。

例2:C:根目錄下有一批處理文件名為f.bat,內(nèi)容為:
@echo off
format %1

如果執(zhí)行C:>f a:
那么在執(zhí)行f.bat時(shí),%1就表示a:,這樣format %1就相當(dāng)于format a:,于是上面的命令運(yùn)行時(shí)實(shí)際執(zhí)行的是format a:

例3:C:根目錄下一批處理文件名為t.bat,內(nèi)容為:
@echo off
type %1
type %2

那么運(yùn)行C:>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令將順序地顯示a.txt和b.txt文件的內(nèi)容。

==== 注 ===============
參數(shù)在批處理中也作為變量處理, 所以同樣使用百分號(hào)作為引導(dǎo)符, 其后跟0-9中的一個(gè)數(shù)字構(gòu)成參數(shù)引用符. 引用符和參數(shù)之間 (例如上文中的 %1 與 a: ) 的關(guān)系類似于變量指針與變量值的關(guān)系. 當(dāng)我們要引用第十一個(gè)或更多個(gè)參數(shù)時(shí), 就必須移動(dòng)DOS 的參數(shù)起始指針. shift 命令正充當(dāng)了這個(gè)移動(dòng)指針的角色, 它將參數(shù)的起始指針移動(dòng)到下一個(gè)參數(shù), 類似C 語(yǔ)言中的指針操作. 圖示如下:

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

經(jīng)過(guò)1次shift后, cmd 將無(wú)法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

經(jīng)過(guò)2次shift后, arg1也被廢棄, %9指向?yàn)榭? 沒(méi)有引用意義
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8

遺憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 內(nèi)核命令行環(huán)境下, shift 才支持 /n 參數(shù), 可以以第一參數(shù)為基準(zhǔn)返復(fù)移動(dòng)起始指針.
=================

特殊命令


if goto choice for是批處理文件中比較高級(jí)的命令,如果這幾個(gè)你用得很熟練,你就是批處理文件的專家啦。


一、if 是條件語(yǔ)句,用來(lái)判斷是否符合規(guī)定的條件,從而決定執(zhí)行不同的命令。 有三種格式:

1、if [not] "參數(shù)" == "字符串" 待執(zhí)行的命令

參數(shù)如果等于(not表示不等,下同)指定的字符串,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。

例:if "%1"=="a" format a:

====

if 的命令行幫助中關(guān)于此點(diǎn)的描述為:
IF [NOT] string1==string2 command
在此有以下幾點(diǎn)需要注意:
1. 包含字符串的雙引號(hào)不是語(yǔ)法所必須的, 而只是習(xí)慣上使用的一種"防空"字符
2. string1 未必是參數(shù), 它也可以是環(huán)境變量, 循環(huán)變量以及其他字符串常量或變量
3. command 不是語(yǔ)法所必須的, string2 后跟一個(gè)空格就可以構(gòu)成一個(gè)有效的命令行
=============================

2、if [not] exist [路徑]文件名 待執(zhí)行的命令
如果有指定的文件,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。

如: if exist c:config.sys type c:config.sys
表示如果存在c:config.sys文件,則顯示它的內(nèi)容。

****** 注 ********
也可以使用以下的用法:
if exist command
device 是指DOS系統(tǒng)中已加載的設(shè)備, 在win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具體的內(nèi)容會(huì)因硬軟件環(huán)境的不同而略有差異, 使用這些設(shè)備名稱時(shí), 需要保證以下三點(diǎn):
1. 該設(shè)備確實(shí)存在(由軟件虛擬的設(shè)備除外)
2. 該設(shè)備驅(qū)動(dòng)程序已加載(aux, prn等標(biāo)準(zhǔn)設(shè)備由系統(tǒng)缺省定義)
3. 該設(shè)備已準(zhǔn)備好(主要是指a: b: ..., com1..., lpt1...等)
可通過(guò)命令 mem/d | find "device" /i 來(lái)檢閱你的系統(tǒng)中所加載的設(shè)備
另外, 在DOS系統(tǒng)中, 設(shè)備也被認(rèn)為是一種特殊的文件, 而文件也可以稱作字符設(shè)備; 因?yàn)樵O(shè)備(device)與文件都是使用句柄(handle)來(lái)管理的, 句柄就是名字, 類似于文件名, 只不過(guò)句柄不是應(yīng)用于磁盤管理, 而是應(yīng)用于內(nèi)存管理而已, 所謂設(shè)備加載也即指在內(nèi)存中為其分配可引用的句柄.
==================================

3、if errorlevel <數(shù)字> 待執(zhí)行的命令

很多DOS程序在運(yùn)行結(jié)束后會(huì)返回一個(gè)數(shù)字值用來(lái)表示程序運(yùn)行的結(jié)果(或者狀態(tài)),通過(guò)if errorlevel命令可以判斷程序的返回值,根據(jù)不同的返回值來(lái)決定執(zhí)行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等于指定的數(shù)字,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。

如if errorlevel 2 goto x2

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

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
...

當(dāng)然, 也可以使用以下循環(huán)來(lái)替代, 原理是一致的:
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e

更高效簡(jiǎn)潔的用法, 可以參考我寫的另一篇關(guān)于獲取 errorlevel 的文章

出現(xiàn)此種現(xiàn)象的原因是, if errorlevel 比較返回碼的判斷條件并非等于, 而是大于等于. 由于 goto 的跳轉(zhuǎn)特性, 由小到大排序會(huì)導(dǎo)致在較小的返回碼處就跳出; 而由于 set命令的 "重復(fù)" 賦值特性, 由大到小排序會(huì)導(dǎo)致較小的返回碼 "覆蓋" 較大的返回碼.

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


二、goto 批處理文件運(yùn)行到這里將跳到goto所指定的標(biāo)號(hào)(標(biāo)號(hào)即label,標(biāo)號(hào)用:后跟標(biāo)準(zhǔn)字符串來(lái)定義)處,goto語(yǔ)句一般與if配合使用,根據(jù)不同的條件來(lái)執(zhí)行不同的命令組。

如:

goto end

:end
echo this is the end

標(biāo)號(hào)用":字符串"來(lái)定義,標(biāo)號(hào)所在行不被執(zhí)行。

==== willsort 編注

label 常被譯為 "標(biāo)簽" , 但是這并不具有廣泛的約定性.

goto 與 : 聯(lián)用可實(shí)現(xiàn)執(zhí)行中途的跳轉(zhuǎn), 再結(jié)合 if 可實(shí)現(xiàn)執(zhí)行過(guò)程的條件分支, 多個(gè) if 即可實(shí)現(xiàn)命令的分組, 類似 C 中 switch case 結(jié)構(gòu)或者 Basic 中的 select case 結(jié)構(gòu), 大規(guī)模且結(jié)構(gòu)化的命令分組即可實(shí)現(xiàn)高級(jí)語(yǔ)言中的函數(shù)功能. 以下是批處理和C/Basic在語(yǔ)法結(jié)構(gòu)上的對(duì)照:

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 使用此命令可以讓用戶輸入一個(gè)字符(用于選擇),從而根據(jù)用戶的選擇返回不同的errorlevel,然后于if errorlevel配合,根據(jù)用戶的選擇運(yùn)行不同的命令。

注意:choice命令為DOS或者Windows系統(tǒng)提供的外部命令,不同版本的choice命令語(yǔ)法會(huì)稍有不同,請(qǐng)用choice /?查看用法。

choice的命令語(yǔ)法(該語(yǔ)法為Windows 2003中choice命令的語(yǔ)法,其它版本的choice的命令語(yǔ)法與此大同小異):

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:
該工具允許用戶從選擇列表選擇一個(gè)項(xiàng)目并返回所選項(xiàng)目的索引。

參數(shù)列表:
/C choices 指定要?jiǎng)?chuàng)建的選項(xiàng)列表。默認(rèn)列表是 "YN"。

/N 在提示符中隱藏選項(xiàng)列表。提示前面的消息得到顯示,
選項(xiàng)依舊處于啟用狀態(tài)。

/CS 允許選擇分大小寫的選項(xiàng)。在默認(rèn)情況下,這個(gè)工具
是不分大小寫的。

/T timeout 做出默認(rèn)選擇之前,暫停的秒數(shù)??山邮艿闹凳菑?0
到 9999。如果指定了 0,就不會(huì)有暫停,默認(rèn)選項(xiàng)
會(huì)得到選擇。

/D choice 在 nnnn 秒之后指定默認(rèn)選項(xiàng)。字符必須在用 /C 選
項(xiàng)指定的一組選擇中; 同時(shí),必須用 /T 指定 nnnn。

/M text 指定提示之前要顯示的消息。如果沒(méi)有指定,工具只
顯示提示。

/? 顯示幫助消息。

注意:
ERRORLEVEL 環(huán)境變量被設(shè)置為從選擇集選擇的鍵索引。列出的第一個(gè)選
擇返回 1,第二個(gè)選擇返回 2,等等。如果用戶按的鍵不是有效的選擇,
該工具會(huì)發(fā)出警告響聲。如果該工具檢測(cè)到錯(cuò)誤狀態(tài),它會(huì)返回 255 的
ERRORLEVEL 值。如果用戶按 Ctrl+Break 或 Ctrl+C 鍵,該工具會(huì)返回 0
的 ERRORLEVEL 值。在一個(gè)批程序中使用 ERRORLEVEL 參數(shù)時(shí),將參數(shù)降
序排列。

示例:
CHOICE /?
CHOICE /C YNC /M "確認(rèn)請(qǐng)按 Y,否請(qǐng)按 N,或者取消請(qǐng)按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "選項(xiàng) 1 請(qǐng)選擇 a,選項(xiàng) 2 請(qǐng)選擇 b。"
CHOICE /C ab /N /M "選項(xiàng) 1 請(qǐng)選擇 a,選項(xiàng) 2 請(qǐng)選擇 b。"

==== willsort 編注 ===============================
我列出win98下choice的用法幫助, 已資區(qū)分

Waits for the user to choose one of a set of choices.
等待用戶選擇一組待選字符中的一個(gè)

CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

/C[:]choices Specifies allowable keys. Default is YN
指定允許的按鍵(待選字符), 默認(rèn)為YN
/N Do not display choices and ? at end of prompt string.
不顯示提示字符串中的問(wèn)號(hào)和待選字符
/S Treat choice keys as case sensitive.
處理待選字符時(shí)大小寫敏感
/T[:]c,nn Default choice to c after nn seconds
在 nn 秒后默認(rèn)選擇 c
text Prompt string to display
要顯示的提示字符串
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被設(shè)置為用戶鍵入的字符在待選字符中的偏移值
如果我運(yùn)行命令:CHOICE /C YNC /M "確認(rèn)請(qǐng)按 Y,否請(qǐng)按 N,或者取消請(qǐng)按 C。"
屏幕上會(huì)顯示:
確認(rèn)請(qǐng)按 Y,否請(qǐng)按 N,或者取消請(qǐng)按 C。 [Y,N,C]?


例:test.bat的內(nèi)容如下(注意,用if errorlevel判斷返回值時(shí),要按返回值從高到低排列):
@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:dosdefrag
goto end

:mem
mem
goto end

:end
echo good bye

此批處理運(yùn)行后,將顯示"defrag,mem,end[D,M,E]?" ,用戶可選擇d m e ,然后if語(yǔ)句根據(jù)用戶的選擇作出判斷,d表示執(zhí)行標(biāo)號(hào)為defrag的程序段,m表示執(zhí)行標(biāo)號(hào)為mem的程序段,e表示執(zhí)行標(biāo)號(hào)為end的程序段,每個(gè)程序段最后都以goto end將程序跳到end標(biāo)號(hào)處,然后程序?qū)@示good bye,批處理運(yùn)行結(jié)束。

四、for 循環(huán)命令,只要條件符合,它將多次執(zhí)行同一命令。

語(yǔ)法:
對(duì)一組文件中的每一個(gè)文件執(zhí)行某個(gè)特定命令。

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

%%variable 指定一個(gè)單一字母可替換的參數(shù)。
(set) 指定一個(gè)或一組文件。可以使用通配符。
command 指定對(duì)每個(gè)文件執(zhí)行的命令。
command-parameters
為特定命令指定參數(shù)或命令行開(kāi)關(guān)。

例如一個(gè)批處理文件中有一行:
for %%c in (*.bat *.txt) do type %%c

則該命令行會(huì)顯示當(dāng)前目錄下所有以bat和txt為擴(kuò)展名的文件的內(nèi)容。

==== willsort 編注 =====================================================
需要指出的是, 當(dāng)()中的字符串并非單個(gè)或多個(gè)文件名時(shí), 它將單純被當(dāng)作字符串替換, 這個(gè)特性再加上()中可以嵌入多個(gè)字符串的特性, 很明顯 for 可以被看作一種遍歷型循環(huán).
當(dāng)然, 在 nt/2000/xp/2003 系列的命令行環(huán)境中, for 被賦予了更多的特性, 使之可以分析命令輸出或者文件中的字符串, 也有很多開(kāi)關(guān)被用于擴(kuò)展了文件替換功能.
========================================================================

批處理示例

1. IF-EXIST

1) 首先用記事本在C:建立一個(gè)test1.bat批處理文件,文件內(nèi)容如下:
@echo off
IF EXIST AUTOEXEC.BAT TYPE AUTOEXEC.BAT
IF NOT EXIST AUTOEXEC.BAT ECHO AUTOEXEC.BAT does not exist

然后運(yùn)行它:
C:>TEST1.BAT

如果C:存在AUTOEXEC.BAT文件,那么它的內(nèi)容就會(huì)被顯示出來(lái),如果不存在,批處理就會(huì)提示你該文件不存在。

2) 接著再建立一個(gè)test2.bat文件,內(nèi)容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist

執(zhí)行:
C:>TEST2 AUTOEXEC.BAT
該命令運(yùn)行結(jié)果同上。

說(shuō)明:
(1) IF EXIST 是用來(lái)測(cè)試文件是否存在的,格式為
IF EXIST [路徑+文件名] 命令
(2) test2.bat文件中的%1是參數(shù),DOS允許傳遞9個(gè)批參數(shù)信息給批處理文件,分別為%1~%9(%0表示test2命令本身) ,這有點(diǎn)象編程中的實(shí)參和形參的關(guān)系,%1是形參,AUTOEXEC.BAT是實(shí)參。

==== willsort 編注 =====================================================
DOS沒(méi)有 "允許傳遞9個(gè)批參數(shù)信息" 的限制, 參數(shù)的個(gè)數(shù)只會(huì)受到命令行長(zhǎng)度和所調(diào)用命令處理能力的限制. 但是, 我們?cè)谂幚沓绦蛑? 在同一時(shí)刻只能同時(shí)引用10個(gè)參數(shù), 因?yàn)?DOS只給出了 %0~%9這十個(gè)參數(shù)引用符.
========================================================================

3) 更進(jìn)一步的,建立一個(gè)名為TEST3.BAT的文件,內(nèi)容如下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN

如果運(yùn)行:
C:>TEST3 A B C
屏幕上會(huì)顯示:
XIAO
TIAN
XIN

如果運(yùn)行:
C:>TEST3 A B
屏幕上會(huì)顯示
XIAO
TIAN

在這個(gè)命令執(zhí)行過(guò)程中,DOS會(huì)將一個(gè)空字符串指定給參數(shù)%3。

2、IF-ERRORLEVEL

建立TEST4.BAT,內(nèi)容如下:
@ECHO OFF
XCOPY C:AUTOEXEC.BAT D:
IF ERRORLEVEL 1 ECHO 文件拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝文件

然后執(zhí)行文件:
C:>TEST4

如果文件拷貝成功,屏幕就會(huì)顯示"成功拷貝文件",否則就會(huì)顯示"文件拷貝失敗"。

IF ERRORLEVEL 是用來(lái)測(cè)試它的上一個(gè)DOS命令的返回值的,注意只是上一個(gè)命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批處理文件是錯(cuò)誤的:

@ECHO OFF
XCOPY C:AUTOEXEC.BAT D:
IF ERRORLEVEL 0 ECHO 成功拷貝文件
IF ERRORLEVEL 1 ECHO 未找到拷貝文件
IF ERRORLEVEL 2 ECHO 用戶通過(guò)ctrl-c中止拷貝操作
IF ERRORLEVEL 3 ECHO 預(yù)置錯(cuò)誤阻止文件拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過(guò)程中寫盤錯(cuò)誤

無(wú)論拷貝是否成功,后面的:

未找到拷貝文件
用戶通過(guò)ctrl-c中止拷貝操作
預(yù)置錯(cuò)誤阻止文件拷貝操作
拷貝過(guò)程中寫盤錯(cuò)誤

都將顯示出來(lái)。

以下就是幾個(gè)常用命令的返回值及其代表的意義:

backup
0 備份成功
1 未找到備份文件
2 文件共享沖突阻止備份完成
3 用戶用ctrl-c中止備份
4 由于致命的錯(cuò)誤使備份操作中止

diskcomp
0 盤比較相同
1 盤比較不同
2 用戶通過(guò)ctrl-c中止比較操作
3 由于致命的錯(cuò)誤使比較操作中止
4 預(yù)置錯(cuò)誤中止比較

diskcopy
0 盤拷貝操作成功
1 非致命盤讀/寫錯(cuò)
2 用戶通過(guò)ctrl-c結(jié)束拷貝操作
3 因致命的處理錯(cuò)誤使盤拷貝中止
4 預(yù)置錯(cuò)誤阻止拷貝操作

format
0 格式化成功
3 用戶通過(guò)ctrl-c中止格式化處理
4 因致命的處理錯(cuò)誤使格式化中止
5 在提示"proceed with format(y/n)?"下用戶鍵入n結(jié)束

xcopy
0 成功拷貝文件
1 未找到拷貝文件
2 用戶通過(guò)ctrl-c中止拷貝操作
4 預(yù)置錯(cuò)誤阻止文件拷貝操作
5 拷貝過(guò)程中寫盤錯(cuò)誤

chkdsk
0 未找到錯(cuò)誤
255 找到一個(gè)或多個(gè)錯(cuò)誤

choice
0 用戶按下ctrl+c/break
1 用戶按下第一個(gè)鍵
255 檢測(cè)到命令行中的錯(cuò)誤條件
其它 用戶按下的有效字符在列表中的位置

defrag
0 碎片壓縮成功
1 出現(xiàn)內(nèi)部錯(cuò)誤
2 磁盤上沒(méi)有空簇。要運(yùn)行DEFRAG,至少要有一個(gè)空簇
3 用戶用Ctrl+C退出了DEFRAG
4 出現(xiàn)一般性錯(cuò)誤
5 DEFRAG在讀簇時(shí)遇到錯(cuò)誤
6 DEFRAG在寫簇時(shí)遇到錯(cuò)誤
7 分配空間有錯(cuò)
8 內(nèi)存錯(cuò)
9 沒(méi)有足夠空間來(lái)壓縮磁盤碎片

deltree
0 成功地刪除一個(gè)目錄

diskcomp
0 兩盤相同
1 發(fā)現(xiàn)不同
2 按CTRL+C 終止了比較
3 出現(xiàn)嚴(yán)重錯(cuò)誤
4 出現(xiàn)初始化錯(cuò)誤

find
0 查找成功且至少找到了一個(gè)匹配的字符串
1 查找成功但沒(méi)找到匹配的字符串
2 查找中出現(xiàn)了錯(cuò)誤

keyb
0 鍵盤定義文件裝入成功
1 使用了非法的鍵盤代碼,字符集或語(yǔ)法
2 鍵盤定義文件壞或未找到
4 鍵盤、監(jiān)視器通訊時(shí)出錯(cuò)
5 要求的字符集未準(zhǔn)備好

move
0 成功地移動(dòng)了指定的文件
1 發(fā)生了錯(cuò)誤

msav /N
86 檢查到了病毒

replace
0 REPLACE成功地替換或加入了文件
1 MS-DOS版本和REPLACE不兼容
2 REPLACE找不到源文件
3 REPLACE找不到源路徑或目標(biāo)路徑
5 不能存取要替換的文件
8 內(nèi)存不夠無(wú)法執(zhí)行REPLACE
11 命令行句法錯(cuò)誤

restore
0 RESTORE成功地恢復(fù)了文件
1 RESTORE找不到要恢復(fù)的文件
3 用戶按CTRL+C終止恢復(fù)過(guò)程
4 RESTORE因錯(cuò)誤而終止

scandisk
0 ScanDisk在它檢查的驅(qū)動(dòng)器上未檢測(cè)到任何錯(cuò)誤
1 由于命令行的語(yǔ)法不對(duì),不能運(yùn)行ScanDisk
2 由于內(nèi)存用盡或發(fā)生內(nèi)部錯(cuò)誤,ScanDisk意外終止
3 用戶讓ScanDisk中途退出
4 進(jìn)行盤面掃描時(shí),用戶決定提前退出
254 ScanDisk找到磁盤故障并已全部校正
255 ScanDisk找到磁盤故障,但未能全部校正

setver
0 SETVER成功地完成了任務(wù)
1 用戶指定了一個(gè)無(wú)效的命令開(kāi)關(guān)
2 用戶指定了一個(gè)非法的文件名
3 沒(méi)有足夠的系統(tǒng)內(nèi)存來(lái)運(yùn)行命令
4 用戶指定了一個(gè)非法的版本號(hào)格式
5 SETVER在版本表中未找到指定的項(xiàng)
6 SETVER未找到SETVER.EXE文件
7 用戶指定了一個(gè)非法的驅(qū)動(dòng)器
8 用戶指定了太多的命令行參數(shù)
9 SETVER檢測(cè)到丟失了命令行參數(shù)
10 在讀SETVER.EXE文件時(shí),SETVER檢測(cè)到發(fā)生錯(cuò)誤
11 SETVER.EXE文件損壞
12 指定的SETVER.EXE文件不支持版本表
13 版本表中沒(méi)有足夠的空間存放新的項(xiàng)
14 在寫SETVER.EXE文件時(shí)SETVER檢測(cè)到發(fā)生錯(cuò)誤
========================================================================

3、IF STRING1 == STRING2

建立TEST5.BAT,文件內(nèi)容如下:
@echo off
IF "%1" == "A" FORMAT A:

執(zhí)行:
C:>TEST5 A
屏幕上就出現(xiàn)是否將A:盤格式化的內(nèi)容。

注意:為了防止參數(shù)為空的情況,一般會(huì)將字符串用雙引號(hào)(或者其它符號(hào),注意不能使用保留符號(hào))括起來(lái)。
如:if [%1]==[A] 或者 if %1*==A*

5、GOTO

建立TEST6.BAT,文件內(nèi)容如下:
@ECHO OFF
IF EXIST C:AUTOEXEC.BAT GOTO _COPY
GOTO _DONE
:_COPY
COPY C:AUTOEXEC.BAT D:
:_DONE

注意:
(1) 標(biāo)號(hào)前是ASCII字符的冒號(hào)":",冒號(hào)與標(biāo)號(hào)之間不能有空格。
(2) 標(biāo)號(hào)的命名規(guī)則與文件名的命名規(guī)則相同。
(3) DOS支持最長(zhǎng)八位字符的標(biāo)號(hào),當(dāng)無(wú)法區(qū)別兩個(gè)標(biāo)號(hào)時(shí),將跳轉(zhuǎn)至最近的一個(gè)標(biāo)號(hào)。

==== willsort 編注 =====================================================
1)標(biāo)號(hào)也稱作標(biāo)簽(label)
2)標(biāo)簽不能以大多數(shù)的非字母數(shù)字字符開(kāi)始, 而文件名中則可以使用很多
3)當(dāng)無(wú)法區(qū)別兩個(gè)標(biāo)簽時(shí), 將跳轉(zhuǎn)至位置最靠前的標(biāo)簽
========================================================================

6、FOR

建立C:TEST7.BAT,文件內(nèi)容如下:
@ECHO OFF
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C

運(yùn)行:
C:>TEST7

執(zhí)行以后,屏幕上會(huì)將C:盤根目錄下所有以BAT、TXT、SYS為擴(kuò)展名的文件內(nèi)容顯示出來(lái)(不包括隱藏文件)。

?

  • 為了說(shuō)明截取變量中字符串的問(wèn)題曾經(jīng)舉過(guò)如下這個(gè)例子:

    @echo off
    set str=123456789
    echo 第一個(gè)字符為:%str:~0,1%
    echo 頭兩個(gè)字符為:%str:~0,2%
    echo 頭5個(gè)字符為:%str:~0,5%
    echo 去掉最后一個(gè)字符后的字符串為:%str:~0,-1%
    echo 去掉最后3個(gè)字符后的字符串為:%str:~0,-3%
    echo 第4個(gè)字符為:%str:~3,1%
    echo 第4個(gè)及其之后的3個(gè)字符為:%str:~3,4%
    echo 最后一個(gè)字符為:%str:~-1%
    echo 最后一個(gè)字符為:%str:~-1,1%
    echo 最后一個(gè)字符為:%str:~-1,2%
    echo 倒數(shù)第4個(gè)字符為:%str:~-4,1%
    echo 倒數(shù)第4個(gè)及其之后的字符為:%str:~-4%
    echo 倒數(shù)第4個(gè)及其之后的1個(gè)字符為:%str:~-4,2%
    echo 倒數(shù)第4個(gè)及其之后的2個(gè)字符為:%str:~-4,3%
    pause
    為了說(shuō)明這個(gè)問(wèn)題,我在這里把批處理取字符,做下進(jìn)一步的解釋,希望對(duì)新手有所啟發(fā)
    如下:
    echo %var:~n,k%
    我們?cè)谶@里對(duì)每個(gè)參數(shù)做個(gè)說(shuō)明:"%var",即我們要從中要截取字符的字符串." ~ "取字

    符標(biāo)志符(我是這么理解的),"n" 我們將其理解為指針,"k"我們將其理解為偏移地址.(注

    :指針和偏移地址都是從零開(kāi)始數(shù)的)
    我們還是用namejm版主的例子做下說(shuō)明:

    @echo off
    set str=123456789

    rem 定義一個(gè)str字符串為123456789

    echo 第一個(gè)字符為:%str:~0,1%

    rem 指針為0,偏移地址為1,即從第0位開(kāi)始,取1位

    echo 頭兩個(gè)字符為:%str:~0,2%

    rem 指針為0,偏移地址為2,即從第0位開(kāi)始,取2位

    echo 頭5個(gè)字符為:%str:~0,5%

    rem?? 指針為0,偏移地址為5,即從第0位開(kāi)始,取5位

    echo 去掉最后一個(gè)字符后的字符串為:%str:~0,-1%

    rem 當(dāng)"k"為負(fù)值時(shí),我們可以這樣理解:從指針開(kāi)始處開(kāi)始取其后面所有字符,然后減去

    后面"abs(k)位"..所以這個(gè)句字我們可以做如下解釋:從第0位開(kāi)始取其全部字符

    為:123456789然后從后面減去abs(k)位,所以最后結(jié)果為:12345678

    echo 去掉最后3個(gè)字符后的字符串為:%str:~0,-3%

    rem?? 該句解釋同上↑

    echo 最后一個(gè)字符為:%str:~-1%

    rem?? 參數(shù)"n,"和"k"都可以為缺省,缺省"n,"時(shí)可以理解為:從abs(k)位開(kāi)始取其全部

    echo 倒數(shù)第4個(gè)及其之后的字符為:%str:~-4%

    rem 解釋同上↑

    echo 最后一個(gè)字符為:%str:~-1,1%

    rem?? n為負(fù)值時(shí),表示從后面開(kāi)始截取字符,取k位(此時(shí)n應(yīng)從1開(kāi)始數(shù))

    echo 最后一個(gè)字符為:%str:~-1,2%

    rem?? 解釋同上↑

    echo 倒數(shù)第4個(gè)字符為:%str:~-4,1%

    rem?? 解釋同上↑

    echo 倒數(shù)第4個(gè)及其之后的1個(gè)字符為:%str:~-4,2%

    rem?? 解釋同上↑

    echo 倒數(shù)第4個(gè)及其之后的2個(gè)字符為:%str:~-4,3%

    rem 解釋同上↑
    pause
  • ?

    總結(jié)

    以上是生活随笔為你收集整理的简单批处理命令简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久久精品国产sm调教 | 99re在线视频 | 欧美第九页 | 97超碰资源总站 | 婷婷六月综合 | 91成人免费看片 | 俄罗斯破处 | 欧美精品激情视频 | 成人h片| 在线播放亚洲 | 亚天堂 | 99久99| 性感美女被草 | 亚洲女人天堂成人av在线 | 别揉我奶头一区二区三区 | 欧美成人综合视频 | 国产成人精品二区三区亚瑟 | 男人的天堂va | 99re只有精品 | 成人在线你懂的 | 日韩精品极品视频 | 欧美日一区二区 | 国产精品亚洲天堂 | 日日夜夜操视频 | 欧日韩不卡在线视频 | 成在线人免费视频 | www国产精品内射熟女 | 欧美一区二区三区网站 | 总裁憋尿呻吟双腿大开憋尿 | 国产偷亚洲偷欧美偷精品 | 夜夜高潮夜夜爽国产伦精品 | 开心激情综合 | 在线免费看黄色片 | 91最新国产 | 初尝情欲h名器av | 日本性网站 | 黄色网页在线免费观看 | 日韩欧美视频免费观看 | av黄色免费| 免费观看久久 | 加勒比成人av | 欧美日本韩国一区二区 | 日本在线中文字幕专区 | 在线观看免费黄色小视频 | 亚洲一区二区自偷自拍 | 99re在线视频观看 | 国产在线拍揄自揄拍无码视频 | 美女扒开尿口让男人捅爽 | 日韩av一区二区三区在线 | 红桃一区二区三区 | 国产精品2020| 日本亚洲欧美在线 | 久久久精品一区二区三区 | 一本色道综合久久欧美日韩精品 | 精品一卡二卡三卡 | 在线视频日韩 | 一区视频免费观看 | 国产一区二区三区在线观看免费 | 麻豆入口| 久久毛片| 超碰99热| 久久精品99久久久 | 日本黄色天堂 | 午夜影院久久久 | 成年人久久| 成年人在线观看视频免费 | 亚洲深夜视频 | 狠狠操亚洲 | 超碰在线一区 | 成人免费一级片 | 国产偷拍一区二区 | 成人免费毛片糖心 | 日韩亚洲欧美中文字幕 | 色撸撸在线 | 17c在线观看视频 | 本庄优花番号 | 国产探花精品在线 | 欧美日韩一区二区三区免费 | 成人黄色小视频 | 欧美7777| 在线观看国产小视频 | 欧美激情在线观看 | 精品人妻一区二区三区四区久久 | 男人天堂v | 男生和女生一起差差差很痛的视频 | 久久精品亚洲天堂 | 日韩欧美在线第一页 | 国产精品免费大片 | 麻豆网站在线 | 粉嫩小泬无遮挡久久久久久 | 北条麻妃二三区 | 日韩免费中文字幕 | 国产中文字幕在线观看 | 又黄又爽无遮挡 | 亚洲无毛视频 | 在线观看黄色动漫 | 老头吃奶性行交 | 91成人免费视频 | 91爱爱·com|