【工做筆記】BAT批處理學習筆記與示例

BAT批處理學習筆記php

 

1、批註裏定義:批處理文件是將一系列命令按必定的順序集合爲一個可執行的文本文件,其擴展名爲BAT或者CMD,這些命令統稱批處理命令。mysql

 

2、常見的批處理指令:正則表達式

命令清單:sql

     一、REM 和 ::
     二、ECHO 和 @
     三、PAUSE
     四、ERRORLEVEL
     五、TITLE
     六、COLOR
     七、mode 配置系統設備
     八、GOTO 和 :
     九、FIND、FINDSTR
     十、START
     十一、assoc 和 ftype
     十二、pushd 和 popd
     1三、CALL
     1四、shift
     1五、IF
     1六、setlocal 與 變量延遲
     1七、ATTRIB  顯示或更改文件屬性編程


一、REM 和、::和%Annotation%windows

--註釋命令,REM、::、%Annotation%都用來註釋,區別有2個:網絡

a. REM後邊的命令不會執行,但會回顯(僅在echo on的狀況下),而::後邊的命令不執行也不會回顯(不管是echo on 或者 off)。session

b. 其中」:」配合字母或數字開頭的字符串,表示一個被goto識別的標號,而「:」配合如「+」,「-」,「:」等特殊字符,功能和「::」同樣。app

c. %Var%,表示變量,若是改變量不會被使用的話,就能夠認爲是個行內註釋(不經常使用)。框架

 

eg:

@echo on

echo Hello,World %這裏直接執行了echo命令,顯示hello,world%

rem echo Hello,word %這裏沒有執行echo命令,而是顯示rem echo hello,world%

::@echo 按任意鍵結束 & pause > nul

@set /p="按任意鍵結束" < nul & pause > nul


二、ECHO 和 @

--回顯指令,@字符放在命令前面將關閉該條命令的回顯,不管是echo on 或者off。

ECHO指令的用法:

a. echo {on|off}, 表示打開或者關閉回顯,能夠配合@不顯示該命令自己. 在DOS狀態下,輸入echo off將不顯示c/>:等提示符.

b. echo, 表示當先回顯狀態.

c. echo Hello,world! 顯示內容,Hello,World.

d. echo., 表示輸出空行,其中.能夠是任何」,」、」:」等特殊字符但不能有空格. 注意echo.後邊能夠跟」|」DOS專項管道符做爲其餘命令的輸入, 即在執行完管道命令後給出一個回車.

e. echo 答覆語|命令, 用於簡化的人機對話命令, 至關於在出現人機對話框時自動輸入」Y」等答覆語.

f. echo 內容>文件名, 將內容寫入文件名所示的文件, 其中@echo off>1.txt, 能夠建立空白文件.

echo 內容>>文件名, 將內容追加到文件名所示的文件中.

g: echo 打印機控制碼>;PRN, 打印控制碼是按住<Alt>建,在小鍵盤上輸入156, Alt+156,Alt+42,Alt+116表示F5*t.

echo 打印內容>;PRN

h: echo ^G, 使用喇叭鳴響. 其中」^G」這個特殊符號是按住Ctrl+G或者Alt+007輸入產生鳴響.

 

eg:

echo off %關閉回顯%

echo on %打開回顯%

echo %當前回顯狀態%

echo Hello,World %這裏顯示echo命令自己,也顯示結果helloworld%

@echo Hello,World %這裏不顯示echo命令自己,只顯示結果helloworld%

@echo off

echo. %這裏輸出空行%

time %顯示當前時間, 並輸入新的時間%

echo.|time %顯示當前之間並給出回車,並返回Dost提示符%

md 123 %建立123目錄%

ping localhost>123\123.txt %建立1txt文件%

::rd 123 /s %刪除123目錄及其下的全部文件, 會給出確認提示%

echo Y|rd 123 /s %刪除123目錄及其下的全部文件,並自動確認%

@echo off>123.txt %建立名爲123.txt的空文件%

ping localhost>>123.txt %ping命令的結果寫入123.txt%

::@echo 按任意鍵結束 & pause > nul

@set /p="按任意鍵結束" < nul & pause > nul


三、PAUSE

--暫停指令, 顯示提示內容並暫停的2中方式.

echo  您的提示語 & pause > nul, 其中光標在下一行.

@set /p=」您的提示語」 < nul & pause > nul, 其中光標在本行.


四、ERRORLEVEL

--程序返回碼, 能夠利用echo %errorlevel%查看每一個語句的返回碼,默認值爲0,通常狀況下出錯爲1.

 

eg:

//getCurrentDate.bat

@echo off

::開啓延時加載

setlocal enabledelayedexpansion

::

set date=%date:~0,10%

set date=!date:-=!

::echo !date!

exit /b !date!

 

//callBat.bat

call getCurrentDate.bat

echo %errorlevel%

::@echo 按任意鍵結束 & pause > nul

@set /p="按任意鍵結束" < nul & pause > nul

 

 


五、TITLE

--設置cmd窗口的標題. Tile yourTitle, 而後窗口標題就變了.


六、COLOR

--設置默認控制檯前景和背景顏色. 命令格式: color [attr], 其中attr是有2個16進制數字指定,第一個數字表示前景色, 第二個數字表示背景色. 每一個數字的取值以下:

0=黑色          8=灰色

1=藍色          9=淺藍色

2=綠色          A=淡綠色

3=湖藍色        B=淡淺綠色

4=紅色          C=淡紅色

5=紫色          D=淡紫色

6=黃色          E=淡黃色

7=白色          F=亮白色

若沒有指定任何參數, 則會採用CMD啓動時的顏色, 這個值來自CMD窗口或者註冊表. 若前景色和背景色顏色相同, 則因出錯會使errorlevel值爲1.


七、mode 配置系統設備

--配置系統設備.

串行口: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [to=on|off] [xon=on|off]  

                      [odsr=on|off] [octs=on|off] [dtr=on|off|hs] [rts=on|off|hs|tg]

                      [idsr=on|off]

設備狀態: MODE [device] [/STATUS]

打印重定向: MODE LPTn[:]=COMm[:]

選定代碼頁: MODE CON[:] CP SELECT=yyy

代碼頁狀態: MODE CON[:] CP [/STATUS]

顯示模式: MODE CON[:] [COLS=c] [LINES=n]

擊鍵率: MODE CON[:] [RATE=r DELAY=d]

例如:mode con cols=113 lines=15 & color 9f, 此命令設置DOS窗口大小:15行,113列.


八、GOTO 和 :

--跳轉指令, 用來跳轉到」:」表示的標號處並執行標號後的指令. for命令循環有一個缺點,就是整個循環被看成一條命令語句,涉及到變量延遲的問題, 而利用goto語句和條件判斷能夠實現條件循環.

 

eg:

@echo off

:Start

set %errorlevel%=0 %重置errorlevel的值%

set /p num=請輸入一個整數(退出請按0)_

echo 您的輸入爲:%num%

if "%num%"=="0" (

  GOTO Exit

)

set /a num = %num% %% 2

if %errorlevel% GTR 0 (

  echo 您的輸入有誤!

  GOTO Start

)

if {%num%}=={0} (

  echo 您輸入了一個偶數

) else (

  echo 您輸入了一個奇數

)

echo.

GOTO Start

:Exit

 

eg2:

@echo off
set var=0
rem ************
循環開始了
:continue
set /a var+=1
echo
%var%次循環
if %var% lss 100 goto continue
rem ************
循環結束了
echo
循環執行完畢
pause

 


九、FIND、FINDSTR

--Find指令用於在文件中查找指定的字符串, 示例格式: find 「searchStr」 D:\test\123.txt.

--FindStr指令是Find指令的擴展, 其能夠從文件、其餘指令的輸出內容中查找字符串.

Find和FindStr的卻別用途:

a. 能夠找出行數.

b. 能夠讀取Unicode格式的文本, 而Findstr不行.

c. 能夠過濾特殊字符, 而findstr不行, 如: fsutil fsinfo drivers|find /v 「」

d. 注意Findstr中可使用的正則表達式的字符範圍:

          .通配符:任何字符

          *重複:之前零次或屢次出現的字符或類

          ^行中的位置:行首

          $行中的位置:行尾

           [class]字符類:集中的任何一個字符

           [^class]反向類:非集中的任何一個字符

           [X-y]範圍:指定範圍內的任何字符

          \X轉義:元字符 X 的文字用途

          \<xyz字的位置:字首

          xyz\>字的位置:字尾

其中, <和\>是單詞錨定 ^是行首 $是行尾. 別把^,$和\<,\>弄混了一個是行一個是字。行開始與結束沒什麼好說的。而字的開始和結束就不同了,例如:

1.txt裏兩行爲"abcd" 和 "abcd e"用命令findstr "cd\>" 1.txt 兩行都會出現,只要是連在一塊兒(沒被空格開)的並以cd結尾的(不要求是行尾)都知足。至關於文本中出現英語中以cd結尾的的單詞了的行都會輸出來。

 

 

eg:

//d:\test\123.txt內容

abcd

bda

adc

dfdg

!@#

sad

jljlAdsf

AAd ddA

$#@

123""456

dsfasfd"sdfds"asfads

 

//Find、FindStr指令的腳本示例內容

@echo off

echo ###Find指令示例###

find     "a" D:\test\123.txt %查找含有a的整行內容%

find     "a" /off D:\test\123.txt %不要跳過具備脫機屬性(offline)集的文件%

find /i  "a" D:\test\123.txt %查找含有a的整行內容, 並忽略大小寫%

find /c "a" D:\test\123.txt %查找含有a的內容行數%

find /n "a" D:\test\123.txt %查找含有a的整行內容和行號%

find /v "a" D:\test\123.txt %查找不含有a的整行內容%

echo.

echo bdsadcds|find "a"  %從前一條命令中查找含有a的內容%

find "a" D:\test\123.txt|find "s"  %先查找含有a的整行內容, 再在其中查找含有s的整行內容%

find     """" D:\test\123.txt %查找單個雙引號的整行內容, 其中單個雙引號被轉義%

echo.

find     """""" D:\test\123.txt %查找含有兩個連續雙引號的整行內容, 注意轉義的雙引號%

echo.

fsutil fsinfo drives|find /v ""

echo.

echo.

echo ###Findstr指令示例###

findstr           "a" D:\test\123.txt %查找含有a的整行內容%

echo.

echo.

findstr           "a @" D:\test\123.txt %查找含有ab的整行內容%

echo.

echo.

findstr /c:"d d"    D:\test\123.txt %查找含有'd d'的整行內容%

echo.

findstr /b       "a" D:\test\123.txt %查找以a開頭的的整行內容%

echo.

findstr /e       "a" D:\test\123.txt %查找以a結尾的整行內容%

echo.

findstr /l        """ D:\test\123.txt %按原搜索串查詢, 即雙引號中的內容看作原始字符串而非特殊符號%

echo.

echo.

findstr /r       "^[1-9]*..[1-9]*$" D:\test\123.txt %將搜索串做爲正則表達式查找匹配內容%

echo.

findstr /s       "a" D:\test\*.* %在當前目錄和全部子目錄匹配含有搜索串的文件%

echo.

echo.

findstr /i        "a" D:\test\123.txt %查找含有a的整行內容, 且不區分大小寫%

echo.

echo.

findstr /x       "adc" D:\test\123.txt %徹底匹配, 即匹配整行而非關鍵字%

echo.

findstr /v       "a" D:\test\123.txt %不匹配, 即查找不含有a的整行內容%

echo.

findstr /n       "a" D:\test\123.txt %查找含有a的整行內容並顯示其行號%

echo.

echo.

findstr /m      "a" D:\test\*.txt %查找含有字符串a的文件的名稱%

echo.

findstr /o       "a" D:\test\*.txt %查找含有字符串a的整行內容, 以及該行內容以前有多少個字符(不可見的回車符佔2個字符)%

echo.

echo.

findstr /p       "a" D:\test\*.txt %忽略含有不可打印字符的文件%

echo.

echo.

findstr /g:D:\test\str.txt      D:\test\123.txt %123.txt中搜索含有str.txt中的字符串的整行內容%

echo.

echo.

findstr /a:1a  "a"      D:\test\12*.txt %當被搜索文件名中含有通配符*?, 查找含有字符串a的整行內容並以指定顏色顯示文件名%

echo.

echo.

findstr /f:D:\test\list.txt "a" %list.txt中提取文件列表, 而後搜索含有字符串a的整行的內容%

echo.

findstr /D:D:\test\;D:\test1\ "a" *.txt       %以分號分隔的指定目錄下, 搜索全部的txt文件並查找含有a的整行內容%

echo.

echo.

findstr /off "a" D:\test\*.txt %查找含有a的整行內容, 不跳過脫機文件%

::@echo 按任意鍵結束 & pause > nul

@set /p="按任意鍵結束" < nul & pause > nul

 


十、START 、直接運行和 CALL

--調用外部程序的命令.

a. Start、Call和直接運行外部程序的區別:

          直接運行外部程序, 批處理會等待外部程序執行完在繼續日後執行.

          Start外部程序, 批處理會調起外部程序後, 不等待, 繼續日後執行.

          Call用來調用另一個批處理或者該批處理內的命令段, 執行完畢後返回繼續執行.

b. Call命令調用另外的批處理文件時, 必須以.bat或者.cmd做爲命令的結尾. 若調用批處理自身所包含的命令段(至關於子程序), 則命令段以:label開頭, 以goto :eof結尾.

此外,call也能直接運行變量中的命令, 如call %var%, 而var的值爲echo 123.

注意:

在子程序段中,參數%0指標籤:label.

主程序最後要加上exit或跳轉語句,避免錯誤的進入子過程。
子程序和主程序中的變量都是全局變量,其做用範圍都是整個批處理程序。

c. 批處理腳本中的%n表示全部的參數(如:%一、%二、%3…%n), 其中%0表示批處理腳本自己, 而%*則表示一次返回全部參數, 不用再一一返回.

批處理參數的擴展:

     %~1         - 刪除引號("),擴充 %1
         %~f1        - 將 %1 擴充到一個徹底合格的路徑名
         %~d1        - 僅將 %1 擴充到一個驅動器號
         %~p1        - 僅將 %1 擴充到一個路徑
         %~n1        - 僅將 %1 擴充到一個文件名
         %~x1        - 僅將 %1 擴充到一個文件擴展名
         %~s1        - 擴充的路徑指含有短名
         %~a1        - 將 %1 擴充到文件屬性
         %~t1        - 將 %1 擴充到文件的日期/時間
         %~z1        - 將 %1 擴充到文件的大小
         %~$PATH : 1 - 查找列在 PATH 環境變量的目錄,並將 %1擴充到找到的第一個徹底合格的名稱。若是環境變量名未被定義,或者沒有找到文件,此組合鍵會擴充到空字符串.
   

能夠組合修定符來取得多重結果:
        %~dp1       - 只將 %1 擴展到驅動器號和路徑
        %~nx1       - 只將 %1 擴展到文件名和擴展名
        %~dp$PATH:1 - 在列在 PATH 環境變量中的目錄裏查找 %1,並擴展到找到的第一個文件的驅動器號和路徑。
        %~ftza1     - 將 %1 擴展到相似 DIR 的輸出行。
    在上面的例子中,%1 和 PATH 能夠被其餘有效數值替換。

 

注意:%~ 語法被一個有效參數號碼終止。%~ 修定符不能跟 %*使用, 參數擴充時不理會參數所表明的文件是否真實存在,均以當前目錄進行擴展.

eg:

@echo off

explorer d: %啓動explorer而且完畢後才繼續向下執行%

start explorer d: %啓動explorer並繼續向下執行%

echo ###CALL指令示例###

set /p Answer=是否調用腳本自己(y or n)?

if {%Answer%}=={n} (

          GOTO SecondPart

) else (

          call %0 %調用腳本自己%

)

 

:SecondPart

echo ###批處理參數擴展現例####

@echo off>D:\test\tmp.txt %產生一個臨時文件%

Call :sub D:\test\tmp.txt

Del D:\test\tmp.txt

::@echo 按任意鍵結束 & pause > nul

@set /p="按任意鍵結束" < nul & pause > nul

 

:sub

echo 參數原始值: %~1

echo 擴充到路徑: %~f1

echo 擴充到一個驅動器號: %~d1

echo 擴充到一個路徑: %~p1

echo 擴充到一個文件名: %~n1

echo 擴充到一個文件擴展名: %~x1

echo 擴充的路徑指含有短名: %~s1

echo 擴充到文件屬性: %~a1

echo 擴充到文件的日期/時間: %~t1

echo 擴充到文件的大小: %~z1

echo 擴展到驅動器號和路徑:%~dp1

echo 擴展到文件名和擴展名:%~nx1

echo 擴展到相似 DIR 的輸出行:%~ftza1

echo.

Goto :eof

:Exit

exit

 

eg2:

@echo off
set sum=0
call :sub sum 10 20 35
echo
數據求和結果:%sum%
pause
:sub
rem
參數1爲返回變量名稱
set /a %1=%1+%2
shift /2
if not "%2"=="" goto sub
goto :eof

 

 


十一、assoc 和 ftype

--assoc設置'文件擴展名'關聯,關聯到'文件類型'.
--ftype 設置'文件類型'關聯,關聯到'執行程序和參數'.
a. 文件關聯過程:當你雙擊一個.txt文件時,windows先判斷.txt屬於 txtfile '文件類型', 再調用 txtfile 關聯的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1 打開文件.
能夠在"文件夾選項"→"文件類型"裏修改這2種關聯
assoc            #顯示全部'文件擴展名'關聯
assoc .txt      #顯示.txt表明的'文件類型',結果顯示 .txt=txtfile
assoc .doc     #顯示.doc表明的'文件類型',結果顯示 .doc=Word.Document.8
assoc .exe     #顯示.exe表明的'文件類型',結果顯示 .exe=exefile
ftype            #顯示全部'文件類型'關聯
ftype exefile  #顯示exefile類型關聯的命令行,結果顯示 exefile="%1" %* 
assoc .txt=Word.Document.8         #設置.txt爲word類型的文檔
assoc .txt=txtfile      #恢復.txt的正確關聯
ftype exefile="%1" %*       #恢復 exefile 的正確關聯
若是該關聯已經被破壞,能夠運行 command.com ,再輸入這條命令


十二、pushd 和 popd

--切換目錄相關的命令. 能夠理解爲一個存放目錄的堆棧. 通常用處不大,在當前目錄名不肯定時,會有點幫助。(dos編程中頗有用)

 

eg:
@echo off
c: & cd\ & md mp3   #
C:\ 創建 mp3 文件夾
md d:\mp4              #
D:\ 創建 mp4 文件夾
cd /d d:\mp4           #
更改當前目錄爲 d:\mp4
pushd c:\mp3          #
保存當前目錄,並切換當前目錄爲 c:\mp3
popd                      #
恢復當前目錄爲剛纔保存的 d:\mp4


1三、shift

--更改批處理文件中可替換參數的位置.該命令從第 n 個參數開始移位;n 介於零和八之間。如: SHIFT /2會將 %3 移位到 %2,將 %4 移位到 %3,等等;而且不影響 %0 和 %1。


1四、IF

--條件判斷語句,其語法格式以下([/I]表示忽略大小寫):

IF [/I] [NOT] ERRORLEVEL number command

IF [/I] [NOT] string1==string2 command

IF [/I] [NOT] EXIST filename command


下面逐一介紹,更詳細的分析請看後面章節。

(1) IF [NOT] ERRORLEVEL number command

IF ERRORLEVEL這個句子必須放在某一個命令的後面,執行命令後由IF ERRORLEVEL 來判斷命令的返回值。Number的數字取值範圍0~255,判斷時值的排列順序應該由大到小。返回的值大於等於指定的值時,條件成立.

 

(2) IF [NOT] string1==string2 command

檢測當前變量的值作出判斷,爲了防止字符串中含有空格,可用如下格式:

if [NOT] {string1}=={string2} command

if [NOT] [string1]==[string2] command

if [NOT] "string1"=="string2" command

 

==等判斷符號, 還能夠用如下字符表示:

EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於

 

(3) IF [NOT] EXIST filename command

文件或目錄是否存在的意思.以上的IF語句也能夠採用以下的格式:

IF EXIST filename (
                   del filename
          ) ELSE (
                   echo filename missing
          )
也可寫成:if exist filename (del filename) else (echo filename missing)

 

eg:

@echo off
dir c:
rem
退出代碼爲>=1就跳至標題1處執行,>=0就跳至標題0處執行
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 0 goto 0
:0
echo
命令執行成功!
Rem
程序執行完畢跳至標題exit處退出
goto exit
:1
echo
命令執行失敗!
Rem
程序執行完畢跳至標題exit處退出
goto exit
:exit
pause

Echo ###Exsit File示例###

IF EXIST autoexec.bat echo 文件存在!
IF not EXIST autoexec.bat echo
文件不存在!

 



1五、setlocal 與 變量延遲

-- setlocal 用於開啓變量延遲等功能, 其指令爲: setlocal enabledelayedexpansion, 而且變量要用一對歎號「!!」括起來(注意要用英文的歎號),不然就沒有變量延遲的效果.

a.批處理運行命令的機制:

    批處理讀取命令時是按行讀取的(另外例如for命令等,用圓括號括起來的語句也看成一行處理),在處理以前要完成必要的預處理工做,即:先把這整句讀取並對變量賦值,那麼變量在預處理時就已經被替換爲具體的值了.而批處理設計的變量延遲就是爲了可以感知環境變量的動態變化。簡單來講,在讀取了一條完整的語句以後,不當即對該行的變量賦值,而會在某個單條語句執行以前再進行賦值,也就是說「延遲」了對變量的賦值。

b. 當由於未開啓變量延遲而現實」echo處於關閉狀態」的提示, 即表示沒有感知到語句中的動態變化。

c. 不開啓延遲加載時, 可不用臨時變量就能交換兩個變量的值.

 

eg:

@echo off

echo ###未開啓變量延遲###

set a=4

set a=5 & echo %a% %顯示結果是4%

echo.

echo ###開啓變量延遲###

setlocal enabledelayedexpansion

set a=4

set a=5 & echo !a! %顯示結果是4%

echo.

for /l %%i in (1,1,5) do (

          set a=%%i

          echo !a!

)

::若不開啓延遲變量則會變成"Echo處理關閉狀態", 未感知到動態變化.

echo.

echo ###不開啓延遲加載時, 可不用臨時變量就能交換兩個變量的值###

setlocal disabledelayedexpansion

set var1=abc

set var2=123

echo 交換前: var1=%var1% var2=%var2%

set var1=%var2% & set var2=%var1%

echo 交換後: var1=%var1% var2=%var2%

::@echo 按任意鍵結束 & pause > nul

@set /p="按任意鍵結束" < nul & pause > nul

 

 

1六、set命令

-- set指令經常使用來用來給系統變量或自定義變量賦值. 其還包括如下用法;

  • 設置自定義變量, eg: set var=value
  • 設置自定義變量並接受用戶輸入做爲值, eg: set /p var=請輸入變量值
  • 設置自定義變量並接受數學表達式的結果做爲值, eg: set /a var=1+2+3
  • 替換變量值的內容, eg: set newVar=%oldVar:str1=str2%
  • 字符串截取, eg: set newVar=%oldVar:~start,len%

 

eg:

@echo off

::開啓延時加載

setlocal enabledelayedexpansion

echo ###設置變量的值###

set var=holla %設置變量的值%

echo !var!

echo.

echo ###經過用戶輸入設置變量的值###

set /p var=請輸入您的年齡(按回車結束):

echo 您的年齡是!var!

echo.

echo ###經過數學表達式做爲變量的值###

set /a var=1+2+3*5

echo 1+2+3*5的結果爲: !var!

echo.

set /a var1=1+1,var2=2+1,var3=3+1

echo !var1 !var2! !var3! %運行後會顯示全部的結果%

echo.

echo 對於邏輯或、取餘、與等操做, 須要用雙引號括起來

set /a var1=1"&"1 %與運算%

set /a var2=1"+"1 %異運算%

set /a var3=3%2 %取模運算%

set /a var4=4"<<"3 %4乘以23次方運算%

set /a var5+=3 %自加3%

set /a var6」&=」1 %等於var6=var6」&」1的操做%

echo !var1! !var2! !var3! !var4! !var5! !var6!

echo.

set /p var="Hello, "<nul %第一回用戶輸入, nul表示自動輸入空%

set /p var="Jim."<nul %第二回用戶輸入也同一行%

echo.

echo ###替換變量值的內容###

set oldVar=Holla , @!

set newVar=%oldVar:@=Jim% %替換字符串的內容%

echo !newVar!

echo.

echo ###字符串截取###

set newVar=%oldVar:~0,5% %其中len能夠爲負數%

echo !newVar!

echo.

::@echo 按任意鍵結束 & pause > nul

@set /p="按任意鍵結束" < nul & pause > nul

 

值得注意的是:

a. 關於set /a計算的數學表達式, 其支持的運算符有:

()                 :分組

!、~、-          :一元運算符

*、/、%        :算數運算符

+、-             :算數運算符

<<、>>        :邏輯移位

&                 :按位「與」

^                 :按位「異」

|                  :按位「或」

=、*=、/=     :賦值

%=、+=、-= :賦值

&=、^=、|=  :賦值

<<=、>>=   :賦值

,                  :表達式分隔符

 

b. 關於%var:str1=str2%變量替換操做的擴展操做爲:

          %var: =% %替換var中的空格爲空, 注意等號前面有空格%

c. 關於%var:~start,len%字符串截取操做, start開始位置, 從0開始算. len爲正數, 從左往右數len個, len爲負數則爲從最右端往左數len個.

 


1七、ATTRIB命令

--顯示或更改文件屬性.

格式爲: ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]

其中:

  +   設置屬性。
  -    清除屬性。
  R   只讀文件屬性。
  A   存檔文件屬性。
  S   系統文件屬性。
  H   隱藏文件屬性。
  [drive:][path][filename]
      指定要處理的文件路徑。
  /S  處理當前文件夾及其子文件夾中的匹配文件。
  /D  也處理文件夾。

 

eg:

@echo off

md autorun
attrib +a +s +h autorun
%而後將其設爲存檔、系統、隱藏屬性%



特殊指令:

有時寫批處理須要用到退格符,要在記事本里輸入退格符能夠採用如下方法:

方法1:首先進入CMD,而後輸入EDIT回車,按Ctrl+P+BackSpace,就能獲得一個退格符,能夠複製粘貼至記事本

方法2:在記事本中按Ctrl+BackSpace,獲得一個退格符(看着和空格同樣)




3、常見的批處理特殊符號

   符號清單:
    一、@  命令行回顯屏蔽符
    二、%  批處理變量引導符
    三、>   重定向符
    四、>>  重定向符
    五、<、>&、<& 重定向符
    六、|  命令管道符
    七、^  轉義字符
    八、&  組合命令
    九、&& 組合命令
    十、||  組合命令
    十一、""  字符串界定符
    十二、, 逗號
    1三、; 分號
    1四、() 括號
    1五、! 感嘆號
    1六、批處理中可能會見到的其它特殊標記符: (略)
          CR(0D) 命令行結束符 
          Escape(1B) ANSI轉義字符引導符 
          Space(20) 經常使用的參數界定符 
          Tab(09) ; = 不經常使用的參數界定符 
          + COPY命令文件鏈接符 
          * ? 文件通配符 
          / 參數開關引導符 
          : 批處理標籤引導符 

一、@  : 關閉當前行的回顯。
ECHO OFF能夠關閉掉整個批處理命令的回顯,但不能關掉ECHO OFF這個命令自己,如今咱們在ECHO OFF這個命令前加個@,就能夠達到全部命令均不回顯的要求


二、%  批處理變量引導符,嚴格來講不算命令,它只是批處理中的參數而已(多個%一塊兒使用的狀況除外,之後還將詳細介紹)。
引用變量用%var%,調用程序外部參數用%1至%9等等
%0  %1  %2  %3  %4  %5  %6  %7  %8  %9  %*爲命令行傳遞給批處理的參數
%0 批處理文件自己,包括完整的路徑和擴展名
%1 第一個參數
%9 第九個參數
%* 從第一個參數開始的全部參數
參數%0具備特殊的功能,能夠調用批處理自身,以達到批處理自己循環的目的,也能夠複製文件自身等等。
小技巧:添加行內註釋
%註釋內容%(能夠用做行內註釋,不能出現重定向符號和管道符號)
爲何這樣呢?此時「註釋內容」其實被看成變量,其值是空的,故只起註釋做用,不過這種用法容易出現語法錯誤,通常不用。

 

eg:
copy %0 d:\wind.bat %最簡單的複製文件自身的方法%


三、>   重定向符, 輸出重定向命令. 這個字符的意思是傳遞而且覆蓋,他所起的做用是將運行的結果傳遞到後面的範圍(後邊能夠是文件,也能夠是默認的系統控制檯).
注意: 在NT系列命令行中,重定向的做用範圍由整個命令行轉變爲單個命令語句,受到了命令分隔符&,&&,||和語句塊的制約限制。


eg:
echo hello >1.txt %將創建文件1.txt,內容爲hello (注意行尾有一空格)%
echo hello>1.txt
%將創建文件1.txt,內容爲hello(注意行尾沒有空格)%


四、>>  重定向符, 輸出重定向命令.這個符號區別於>,他的做用是傳遞並在文件的末尾追加,而>是覆蓋.

eg:
echo hello > 1.txt  %1.txt中顯示hello%
echo world >>1.txt
%1.txt的第二行追加world%



五、<、>&、<& 重定向符, 這三個命令也是管道命令, 其中<是輸入重定向命令,從文件中讀取命令輸入; >&是將左側句柄的輸出寫入到右側句柄的輸入中; <&是從右側句柄中讀取輸出並將其寫入到左側的句柄輸入中。

其中經常使用的句柄:0、一、2,未定義句柄:3—9. 其中的1與2都是表明某個數據流輸入輸出的地址(NT CMD 稱之爲句柄,MSDOS稱之爲設備)。

1>nul 表示禁止輸出正確的信息。
2>nul 表示禁止輸出錯誤信息。

句柄0:標準輸入stdin,鍵盤輸入
句柄1:標準輸出stdout,輸出到命令提示符窗口(console,代碼爲CON)
句柄2:標準錯誤stderr,輸出到命令提示符窗口(console,代碼爲CON)
其中的stdin可被<重定向,stdout可被>、>>重定向。
例如: ipconfig >mylog.txt 2>&1指令中, 表示將ipconfig操做結果發送到mylog.txt中並同時將錯誤信息也發送到mylog.txt中.相似指令的結果經過」%>」的形式來定向輸出, %表示文件描述, 1爲標準輸出, 2爲標準錯誤輸出. 系統默認%的值爲1, 也就是」1>」(簡寫爲」>」). StdOut的默認目標是終端, stderr的默認目標也是終端. 這也解釋了爲何在批處理直接輸入echo hello>log.txt, 控制檯會顯示echo hello 1>log.txt

 

eg:

@echo off
echo 2005-05-01>temp.txt
date <temp.txt
                     %這樣就能夠不等待輸入直接修改當前日期%
echo.
rem 採用簡便方法從文本中讀取第一行的代碼
set /p str=<temp.txt
echo %str%

del temp.txt
pause

@echo on

ipconfig >mylog.txt 2>&1 %命令結果和錯誤信息都寫入mylog.txt%

Rem 演示加句柄的區別

ipconfig >mylog.txt %結果直接寫入mylog%

ipconfig >mylog.txt 2>&1 %結果直接寫入mylog%

ipconfiiig >mylog.txt %出現錯誤, 錯誤信息顯示在控制檯,而文本中未寫入任何內容%

ipconfiiig >mylog.txt 2>&1 %出現錯誤,但控制檯不顯示,錯誤信息直接寫入文本中%

pause

六、|  命令管道符, 將第一條命令的結果做爲第二條命令的參數來使用,在unix中很常見。
格式:第一條命令 | 第二條命令 [| 第三條命令...]

eg:

@echo off
dir c:\|find "txt"
%dir的結果中查找txt字符串%

echo y|chkdsk a: /s /q /v:system %在出現確認提示時,自動輸入Y%


七、^  轉義字符, ^是對特殊符號<,>,&的前導字符,在命令中他將以上3個符號當成符號而不使用他們的特殊意義。

eg:

@echo off
echo test ^>1.tx
t  %test > 1.txt%
Rem轉義字符讓行尾的回車符失效了,從而起到了續行的做用

echo 英雄^
^
^
男人
pause



八、組合命令, 能夠把多個命令組合起來當一個命令來執行, 批處理認行不認命令數目。

注意: 組合命令和重定向命令一塊兒使用時的優先級: 管道命令 > 重定向命令 > 組合命令.

 

a. &  組合命令: 該符號表示當第一個命令執行失敗了,後邊的命令依然會循序從前日後執行。
語法:第一條命令 & 第二條命令 [& 第三條命令...]
b. && 組合命令: 當某一條命令執行出錯時將不執行後面的命令,不然會一直執行完全部命令.

語法:第一條命令 && 第二條命令 [&& 第三條命令...]

c. ||  組合命令: 當一條命令失敗後才執行第二條命令,當碰到執行正確的命令後將不在向後執行命令,若是沒有出現正確的命令則一直執行完全部命令.

語法:第一條命令 || 第二條命令 [|| 第三條命令...]

 

eg:
dir z:\ & dir y:\ & dir c:\ %連續顯示z,y,c盤的內容, 無論該盤是否存在%

dir z:\ && dir y:\ && dir c:\ %連續顯示z,y,c盤內容, 若不存在則不繼續執行%
dir c:\ && dir d:\ > a.txt
%a.txt只顯示d盤的文件內容%
dir c:\ > a.txt && dir d:\ >> a.txt
%a.txt顯示c盤、d盤的文件內容%
dir c:\ > a.txt & dir d:\ >> a.txt
%c盤不存在, 也會繼輸出d盤的內容%

dir c:\;d:\ >>a.txt %也能夠輸出cd盤的文件內容%

 


九、""  字符串界定符, 雙引號容許在字符串中包含空格.

eg:

@echo off
cd "program files" %進入program files目錄%
cd progra~1 %進入program files目錄%
cd pro* %進入program files目錄%


十、, 逗號. 在某些狀況下「,」能夠用來當作空格使
eg:

@echo off
dir,c:\ %,號代替空格使用%

十一、; 分號,用於在命令相同時,用來分隔不一樣目標, 且執行效果不變.如執行過程當中發生錯誤,則只返回錯誤報告,但程序仍會執行。

 

eg:

rem若是目標路徑不存在,則終止執行;若是路徑存在,僅文件不存在,則繼續執行。
dir c:\;d:\;e:\;z:\
  %以上命令至關於dir c:\, dir d:\, dir e:\...%
dir c:\
dir d:\
dir e:\
dir f:\

echo.
dir c:\;d:\;e:\1.txt


十二、() 括號, 括號中能夠包括多行命令,這些命令將視爲一條命令行。括號在for語句和if語句中常見,用來嵌套使用循環或條件語句,其實括號()也能夠單獨使用。

eg:

@echo off

echo 1 & echo 2 & echo 3
rem 等同於下面的寫法, 但要注意變量延遲的問題

(
echo 1
echo 2
echo 3
)



1三、! 感嘆號, 在變量延遲問題中,用來表示變量,即%var%應該表示爲!var!。

 

4、for命令詳解
a. 基本格式:FOR                     %%variable IN (set)       DO cmd [cmd-params]

b. /D格式:FOR /D                  %%variable IN (set)       DO cmd [cmd-params]

c. /R格式:FOR /R [[drv:]path] %%variable IN (set)      DO cmd [cmd-params]

d. /L格式:FOR /L                   %%variable IN (start,step,end) DO cmd [cmd-params]
e. /F格式:FOR /F [「options」]   %%variable IN (set)       DO cmd [cmd-params]

     FOR /F [「options」]   %%variable IN ("string") DO cmd [cmd-params]

     FOR /F [「options」]   %%variable IN ('cmd')    DO cmd [cmd-params]

其中,/D指定與目錄名匹配, /R指定與path爲根的目錄樹迭代匹配目錄名(若set爲單點」.」字符,則枚舉該目錄樹; 若path爲空則爲當前目錄), /L指定與增量形式從開始到結束的數字序列, /F根據給定的令牌選項使用文件解析來處理命令輸出、字符串及文件內容(注意: 在沒有使用tokens=選項時, /F將只檢查第一個匹配的值).

  參數
  %%variable  指定一個單一字母表示可替換的參數。
  (set)      指定一個或一組文件,可使用通配符(* 和 ?)。

  (「string」)      指定一個字符串, 當存在usebackq選項時, 參數形式爲(‘string’)。

  (‘cmd’)      指定一個命令語句,當存在usebackq選項時, 參數以」波浪號的點」區分(`cmd`)。
  cmd    指定對每一個文件執行的命令。
  cmd-params爲特定命令指定參數或命令行開關。


注意: 關於/F格式時, 「options」的可選參數以下:
eol=c                 - 指一個行註釋字符的結尾(就一個)

skip=n               - 指在文件開始時忽略的行數。
delims=xxx        - 指分隔符集。這個替換了默認的分隔符(默認爲空格和跳格鍵)。
tokens=x,y,m-n  - 指每行的哪個符號被傳遞到每一個迭代的 for 自己,而且會致使額外變量名 

                  稱的分配。

                  m-n格式爲一個範圍。經過 nth 符號指定 mth。

                  若是符號最後是一個星號(*),那麼多餘%%j,%%k等變量將在末尾的符號解析

                  以後依次給剩餘變量賦予剩餘的匹配文本(而且不能超過31個字段).
usebackq          - 使用後引號(跟波浪號在一塊兒的按鍵`)。
                        未使用參數usebackq時:file-set表示文件,但不能含有空格, 雙引號

                 "string"表示字符串, 單引號'command'表示執行命令.
                        使用參數usebackq時:file-set和"file- set"都表示文件, 雙引號可用於含空

                 格的狀況.單引號'string'表示字符串,後引號`command`表示命令執行.

注意: FOR命令中的%%I變量擴展格式
         ~I        - 刪除任何引號("),擴展 %I
     %~fI        - 將 %I 擴展到一個徹底合格的路徑名
     %~dI       - 僅將 %I 擴展到一個驅動器號
     %~pI       - 僅將 %I 擴展到一個路徑
     %~nI       - 僅將 %I 擴展到一個文件名
     %~xI       - 僅將 %I 擴展到一個文件擴展名
     %~sI       - 擴展的路徑只含有短名
     %~aI       - 將 %I 擴展到文件的文件屬性
     %~tI       - 將 %I 擴展到文件的日期/時間
     %~zI       - 將 %I 擴展到文件的大小
     %~$PATH:I   - 查找列在路徑環境變量的目錄,並將 %I 擴展到找到的第一個徹底合格的名

                   稱。若是環境變量名未被定義,或者沒有找到文件,此擴展到空字符串.

eg:

@echo off

echo ###顯示Test目錄下的文件###

for %%i in (D:\test\*) do (

          echo %%i

)

echo.

echo ###1. 顯示Test目錄下的目錄###

for /d %%i in (D:\*) do (

          echo %%i

)

echo.

::只查找1-4個字符的文件夾

for /d %%i in (D:\????) do (

          echo %%i

)

echo.

echo ###2. 遞歸顯示Test目錄下的文件###

::含有通配符, 則遞歸過程當中會匹配通配符

for /r d:\test\ %%i in (*.txt) do (

          echo %%i

)

echo.

::不含通配符, 遞歸過程當中匯忽略set指定的文件是否存在

for /r d:\test %%i in (d:\test\123.txt) do (

          echo %%i

)

echo.

::只列舉存在的文件

for /r d:\ %%i in (d:\test\123.txt) do (

          if exist %%i echo %%i

)

echo.

::/r後不含目錄, 則默認爲當前目錄

for /r %%i in (d:\test\123.txt) do (

          echo %%i

)

echo.

echo ###3.以增量形式表示的從開始到結束的數字序列###

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

          echo %%i

)

echo.

::執行2

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

          start explorer d:\

)

echo.

echo ###4. 使用文件解析來處理命令輸出、字符串及內容###

rem 首先創建臨時文件test.txt

echo ;註釋行,這是臨時文件,用完刪除 >test.txt %分號開頭的行爲註釋行%

echo 11 12 13 14 15 16 >>test.txt

echo 21,22,23,24,25,26 >>test.txt

echo 31-32-33-34-35-36 >>test.txt

::將每行第一段、第三段和剩餘字段分別賦予變量%%i%%j%%k

::以逗號、減號和空格做爲分隔符(空格必須放在最後)

for /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do (

          echo %%i %%j %%k

)

Pause

Del test.txt

echo.

::顯示123.txt的所有內容, 包括註釋行.

for /f "eol= delims=" %%i in (d:\test\123.txt) do (

          echo %%i

)

echo.

::不加tokens則默認只顯示第一列

for /f "delims=" %%i in ('net user') do (

          echo %%i

)

echo.

echo ###For語句中的擴展變量###

::開頭有引號則刪首位引號, 開頭無引號則不刪.(無頭不刪,有頭連尾刪)

for /f "delims=" %%i in (d:\test\123.txt) do (

          echo %%~i

)

echo.

::%%~fi將文件名擴展爲徹底路徑.

::%%~di將文件名擴展爲一個驅動器號.

::%%~pi將文件名擴展爲僅包含路徑.

::%%~ni打印文件名.

::%%~xi打印文件的擴展名.

::%%~si打印文件的絕對短文件名.

::%%~ai打印文件的屬性.

::%%~ti打印文件的創建日期.

::%%~zi打印文件的大小.

for /f "delims==" %%i in ('dir /b') do (

          echo %%~fi

          echo %%~di

          echo %%~pi

          echo %%~ni

          echo %%~xi

          echo %%~si

          echo %%~ai

          echo %%~ti

          echo %%~zi

)

echo.

::%%~$PATH:ipath變量裏搜索內容, 若是有則打印絕對路徑, 不然打印錯誤.

for /f "delims=" %%i in ("notepad.exe") do (

          echo %%~$Path:i

)

echo.

::@echo 按任意鍵結束 & pause > nul

@set /p="按任意鍵結束" < nul & pause > nul

 

 

                                
5、批處理中的特殊變量(包括本地變量、系統變量)

本地變量和系統變量的值由系統將其根據事先定義的條件自動賦值咱們只須要調用而以.
%ALLUSERSPROFILE%        本地    返回「全部用戶」配置文件的位置。
%APPDATA%                     本地    返回默認狀況下應用程序存儲數據的位置。
%CD%                             本地    返回當前目錄字符串。
%CMDCMDLINE%               本地    返回用來啓動當前的 Cmd.exe 的準確命令行。
%CMDEXTVERSION%          系統    返回當前的「命令處理程序擴展」的版本號。
%COMPUTERNAME%           系統    返回計算機的名稱。
%COMSPEC%                    系統    返回命令行解釋器可執行程序的準確路徑。
%DATE%                          系統    返回當前日期(與date /t格式相同)。
%ERRORLEVEL%                系統    返回上一條命令的錯誤代碼,一般用非零值表示錯誤。
%HOMEDRIVE%                 系統    返回鏈接到用戶主目錄的本地工做站驅動器號。
%HOMEPATH%                  系統    返回用戶主目錄的完整路徑。
%HOMESHARE%                系統    返回用戶的共享主目錄的網絡路徑。
%LOGONSERVER%             本地    返回驗證當前登陸會話的域控制器的名稱。
%NUMBER_OF_PROCESSORS%      系統    指定安裝在計算機上的處理器的數目。
%OS%                             系統    返回操做系統名稱。Win2K顯示爲 Windows_NT。
%PATH%                          系統    指定可執行文件的搜索路徑。
%PATHEXT%                     系統    返回操做系統認爲可執行的文件擴展名的列表。
%PROCESSOR_ARCHITECTURE%     系統    返回處理器的芯片體系(x86 或 Itanium).
%PROCESSOR_IDENTIFIER%         系統    返回處理器說明。
%PROCESSOR_LEVEL%       系統    返回計算機上安裝的處理器的型號。
%PROCESSOR_REVISION%  系統    返回處理器的版本號。
%PROMPT%                      本地    返回當前解釋程序的命令提示符設置。
%RANDOM%                     系統    返回 0 到 32767 之間的任意十進制數字。
%SYSTEMDRIVE%              系統    返回系統根目錄的驅動器.
%SYSTEMROOT%               系統    返回系統根目錄的位置。
%TEMP%和%TMP%            系統和用戶      返回當前登陸用戶的應用程序的默認臨時目錄。
%TIME%                          系統    返回當前時間(與time /t格式相同)。
%USERDOMAIN%               本地    返回包含用戶賬戶的域的名稱。
%USERNAME%                  本地    返回當前登陸的用戶的名稱。
%USERPROFILE%               本地    返回當前用戶的配置文件的位置。
%WINDIR%                      系統    返回操做系統目錄的位置。

這麼多系統變量,咱們如何知道他的值是什麼呢?
在CMD裏輸入  echo %WINDIR%
這樣就能顯示一個變量的值了!
舉個實際例子,好比咱們要複製文件到當前賬號的啓動目錄裏就能夠這樣
copy d:\1.bat "%USERPROFILE%\「開始」菜單\程序\啓動\"
%USERNAME% 本地 返回當前登陸的用戶的名稱。  注意有空格的目錄要用引號引發來


 

6、交互設計的菜單界面:

eg:
@echo off
cls
title
終極多功能修復
:menu
cls
color 0A
echo.
echo                 ==============================
echo                 
請選擇要進行的操做,而後按回車
echo                 ==============================
echo.
echo              1.
網絡修復及上網相關設置,修復IE,自定義屏蔽網站
echo.
echo              2.
病毒專殺工具,端口關閉工具,關閉自動播放
echo.
echo              3.
清除全部多餘的自啓動項目,修復系統錯誤
echo.
echo              4.
清理系統垃圾,提升啓動速度
echo.
echo              Q.
退出
echo.
echo.
:cho
set choice=
set /p choice=         
請選擇:
IF NOT "%choice%"=="" SET choice=%choice:~0,1%
if /i "%choice%"=="1" goto ip
if /i "%choice%"=="2" goto setsave
if /i "%choice%"=="3" goto kaiji
if /i "%choice%"=="4" goto clean
if /i "%choice%"=="Q" goto endd
echo
選擇無效,請從新輸入
echo.
goto cho



 
7、經常使用示例:

1). 用ftp命令實現自動下載:

--介紹如何用dos命令行調用ftp命令,實現ftp自動登陸,並上傳下載,並自動退出ftp程序。
其實能夠將ftp命令組合保存爲一個文本文件,而後用如下命令調用便可。
ftp命令的格式:

ftp  -n -s:[[drive:]path]filename
上面的filename爲ftp命令文件,包括登陸IP地址,用戶名、密碼、操做命令等


eg:
open 90.52.8.3   #打開ip
user iware      
#用戶爲iware
password8848   
#密碼
bin            
#二進制傳輸模式
prompt
cd tmp1         
#切換至iware用戶下的tmp1目錄
pwd
lcd d:\download   
#本地目錄
mget *         
#下載tmp1目錄下的全部文件
bye            
#退出ftp


2).用7-ZIP實現命令行壓縮和解壓功能
語法格式:

7z <command> [<switch>...] <base_archive_name> [<arguments>...]

7z.exe的每一個命令都有不一樣的參數<switch>,請看幫助文件
<base_archive_name>爲壓縮包名稱
<arguments>爲文件名稱,支持通配符或文件列表
其中,7z是至命令行壓縮解壓程序7z.exe,<command>是7z.exe包含的命令,列舉以下:

a: Adds files to archive. 添加至壓縮包
        a命令可用參數:

-i (Include)

-m (Method)

-p (Set Password)

-r (Recurse)

-sfx (create SFX)

-si (use StdIn)

-so (use StdOut)

-ssw (Compress shared files)

-t (Type of archive)

-u (Update)

-v (Volumes)

-w (Working Dir)

-x (Exclude) 

b: Benchmark 

d: Deletes files from archive. 從壓縮包中刪除文件
      d命令可用參數:

-i (Include)

-m (Method)

-p (Set Password)

-r (Recurse)

-u (Update)

-w (Working Dir)

-x (Exclude) 

e: Extract解壓文件至當前目錄或指定目錄
      e命令可用參數:

-ai (Include archives)

-an (Disable parsing of archive_name)

-ao (Overwrite mode)

-ax (Exclude archives)

-i (Include)

-o (Set Output Directory)

-p (Set Password)

-r (Recurse)

-so (use StdOut)

-x (Exclude)

-y (Assume Yes on all queries) 

l: Lists contents of archive.
t: Test 
u: Update 

x: eXtract with full paths用文件的完整路徑解壓至當前目錄或指定目錄
      x命令可用參數:

-ai (Include archives)

-an (Disable parsing of archive_name)

-ao (Overwrite mode)

-ax (Exclude archives)

-i (Include)

-o (Set Output Directory)

-p (Set Password)

-r (Recurse)

-so (use StdOut)

-x (Exclude)

-y (Assume Yes on all queries) 

3). 調用VBScript程序
--使用 Windows 腳本宿主,能夠在命令提示符下運行腳本。CScript.exe 提供了用於設置腳本屬性的命令行開關。

用法:CScript腳本名稱 [腳本選項...] [腳本參數...]
選項:
//B         批模式:不顯示腳本錯誤及提示信息
//D         啓用 Active Debugging
//E:engine  使用執行腳本的引擎
//H:CScript 將默認的腳本宿主改成 CScript.exe
//H:WScript 將默認的腳本宿主改成 WScript.exe (默認)
//I         交互模式(默認,與 //B 相對)
//Job:xxxx  執行一個 WSF 工做
//Logo      顯示徽標(默認)
//Nologo    不顯示徽標:執行時不顯示標誌
//S         爲該用戶保存當前命令行選項
//T:nn      超時設定秒:容許腳本運行的最長時間
//X         在調試器中執行腳本
//U         用 Unicode 表示來自控制檯的重定向 I/O

「腳本名稱」是帶有擴展名和必需的路徑信息的腳本文件名稱,如d:\admin\vbScripts\chart.vbs。
「腳本選項和參數」將傳遞給腳本。腳本參數前面有一個斜槓 (/)。每一個參數都是可選的;但不能在未指定腳本名稱的狀況下指定腳本選項。若是未指定參數,則 CScript 將顯示 CScript 語法和有效的宿主參數。

4).將批處理轉化爲可執行文件:

若是將批處理文件轉換成.com格式的可執行文件,不只執行效率會大大提升,並且不會破壞原來的功能,更能將優先級提到最高。Bat2Com就能夠完成這個轉換工做。
小知識:在DOS環境下,可執行文件的優先級由高到低依次爲.com>.exe>.bat>.cmd,即若是在同一目錄下存在文件名相同的這四類文件,當只鍵入文件名時,DOS執行的是name.com,若是須要執行其餘三個文件,則必須指定文件的全名,如name.bat。
這是一個只有5.43K大小的免費綠色工具,能夠運行在純DOS或DOS窗口的命令行中,用法:Bat2Com
FileName,這樣就會在同一目錄下生成一個名爲FileNme.com的可執行文件,執行的效果和原來的.bat文件同樣。

5).時間延遲:

什麼是時間延遲?顧名思義,就是執行一條命令後延遲一段時間再進行下一條命令。
延遲的應用見下節:「模擬進度條」。
一、利用ping命令延時
例:
  @echo off
  echo
延時前:%time%
  ping /n 3 127.0.0.1 >nul
  echo
延時後:%time%
  pause 
解說:用到了ping命令的「/n」參數,表示要發送多少次請求到指定的ip。本例中要發送3次請求到本機的ip(127.0.0.1)。127.0.0.1可簡寫爲127.1。「>nul」就是屏蔽掉ping命令所顯示的內容。

二、利用for命令延時
例:
  @echo off
  echo
延時前:%time%
  for /l %%i in (1,1,5000) do echo %%i>nul
  echo
延時後:%time%
  pause

解說:原理很簡單,就是利用一個計次循環並屏蔽它所顯示的內容來達到延時的目的。

三、利用vbs延遲函數,精確度毫秒,偏差1000毫秒內

例:
    @echo off
    echo %time%
    call :delay 5000
    echo %time%
    pause
    exit

    :delay
    echo W
Script.Sleep %1>delay.vbs
    C
Script //B delay.vbs
    del delay.vbs
    goto :eof

運行顯示:
10:44:06.45
10:44:11.95
請按任意鍵繼續. . .

上面的運行結果顯示實際延時了5500毫秒,多出來的500毫秒時創建和刪除臨時文件所耗費的時間。偏差在一秒以內。


四、僅用批處理命令實現任意時間延遲,精確度10毫秒,偏差50毫秒內
僅用批處理命令就能夠實現延遲操做。
例:
@echo off
set /p delay=
請輸入需延遲的毫秒數:
set TotalTime=0
set NowTime=%time%
::
讀取起始時間,時間格式爲:13:01:05.95
echo
程序開始時間:%NowTime%
:delay_continue
set /a minute1=1%NowTime:~3,2%-100
::
讀取起始時間的分鐘數
set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
::
將起始時間的秒數轉爲毫秒
set NowTime=%time%
set /a minute2=1%NowTime:~3,2%-100
::
讀取如今時間的分鐘數
set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
::
將如今時間的秒數轉爲毫秒
set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
if %TotalTime% lss %delay% goto delay_continue
echo
程序結束時間:%time%
echo
設定延遲時間:%delay%毫秒
echo
實際延遲時間:%TotalTime%毫秒
pause

運行顯示:

   請輸入需延遲的毫秒數:6000
   程序開始時間:15:32:16.37
   程序結束時間:15:32:22.37
   設定延遲時間:6000毫秒
   實際延遲時間:6000毫秒
   請按任意鍵繼續. . .

實現原理:首先設定要延遲的毫秒數,而後用循環累加時間,直到累加時間大於等於延遲時間。

偏差:windows系統時間只能精確到10毫秒,因此理論上有可能存在10毫秒偏差。
      經測試,當延遲時間大於500毫秒時,上面的延遲程序通常不存在偏差。當延遲時間小於500毫秒時,可能有幾十毫秒偏差,爲何?由於延遲程序自己也是有運行時間的,同時系統時間只能精確到10毫秒。

爲了方便引用,可將上面的例子改成子程序調用形式:
@echo off
echo
程序開始時間:%Time%
call :delay 10
echo
實際延遲時間:%totaltime%毫秒
echo
程序結束時間:%time%
pause
exit

::-----------
如下爲延時子程序--------------------
:delay
@echo off
if "%1"=="" goto :eof
set DelayTime=%1
set TotalTime=0
set NowTime=%time%
::
讀取起始時間,時間格式爲:13:01:05.95
:delay_continue
set /a minute1=1%NowTime:~3,2%-100
set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
set NowTime=%time%
set /a minute2=1%NowTime:~3,2%-100
set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
if %TotalTime% lss %DelayTime% goto delay_continue
goto :eof


6).模擬進度條

下面給出一個模擬進度條的程序。若是將它運用在你本身的程序中,可使你的程序更漂亮。
@echo off
mode con cols=113 lines=15 &color 9f
cls
echo.
echo  
程序正在初始化. . . 
echo.
echo  ┌──────────────────────────────────────┐
set/p=  
<nul
for /L %%i in (1 1 38) do set /p a=
<nul&ping /n 1 127.0.0.1>nul
echo   100%%
echo  └──────────────────────────────────────┘
pause


解說:「set /p a=■<nul」的意思是:只顯示提示信息「■」且不換行,也不需手工輸入任何信息,這樣可使每一個「■」在同一行逐個輸出。「ping /n 0 127.1>nul」是輸出每一個「■」的時間間隔,即每隔多少時間輸出一個「■」。


7.)特殊字符的輸入及應用
開始 -> 運行 -> 輸入cmd -> edit -> ctrl+p(意思是容許輸入特殊字符)-> 按ctrl+a將會顯示笑臉圖案。
(若是要繼續輸入特殊字符請再次按ctrl+p,而後ctrl+某個字母)
以上是特殊字符的輸入方法,選自[英雄]教程,很管用的。也就是用編輯程序edit輸入特殊字符,而後保存爲一文本文件,再在windows下打開此文件,複製其中的特殊符號便可。

一些簡單的特殊符號能夠在dos命令窗口直接輸入,並用重定向保存爲文本文件。
例:
C:>ECHO ^G>temp.txt
「^G」是用Ctrl+G或Alt+007輸入,輸入多個^G能夠產生多聲鳴響。

特殊字符的應用也頗有意思,這裏僅舉一例:退格鍵
退格鍵表示刪除左邊的字符,此鍵不能在文檔中正常輸入,但能夠經過edit編輯程序錄入並複製出來。即「」。


利用退格鍵,能夠設計閃爍文字效果
例:文字閃爍
@echo off
:start
set/p=
牀前明月光<nul
::
顯示文字,光標停於行尾
ping -n 0 127.0.0.1>nul
::
設置延遲時間
set /p a=<nul
::
輸出一些退格符將光標置於該行的最左端(退格符的數量能夠本身調整)。
set /p a=                               <nul
::
輸出空格將以前輸出的文字覆蓋掉。
set /p a=<nul
::
再次輸出退格符將光標置於該行的最左端,這裏的退格符數量必定不能比前面的空格數少。
::
不然光標不能退到最左端。
goto start


例:輸出唐詩一首,每行閃動屢次
@echo off
setlocal enabledelayedexpansion

set str=
牀前明月光疑是地上霜舉頭望明月低頭思故鄉
::
定義字符串str
for %%i in (%str%) do (
rem
因爲str中含有空格,則以空格爲分隔符將str中的每個部分依次賦給變量%%i
        set char=%%i
        echo.
        echo.
        for /l %%j in (0,1,5) do (
                set/p=!char:~%%j,1!<nul
  rem
依次取出變量char中的每個字符,並顯示。
                ping -n 0 127.0.0.1>nul
  rem
設置輸出每一個字符的時間延遲。
        )
call :hero %%i
)
pause>nul
exit

:hero
for /l %%k in (1,1,10) do (
ping /n 0 127.0.0.1>nul
set /p a=<nul
set /p a=                               <nul
set /p a=<nul
ping /n 0 127.0.0.1>nul
set /p a=%1<nul
)
::
文字閃動
goto :eof

8.)隨機數(%random%)的應用技巧
%RANDOM% 系統變量 返回 0 到 32767 之間的任意十進制數字。由 Cmd.exe 生成。
2的15次方等於32768,上面的0~32767實際就是15位二進制數的範圍。
那麼,如何獲取100之內的隨機數呢?很簡單,將%RANDOM%按100進行求餘運算便可,見例子。

例:生成5個100之內的隨機數
  @echo off
  setlocal enabledelayedexpansion
  for /L %%i in (1 1 5) do (
     set /a randomNum=!random!%%100
     echo
隨機數:!randomNum!
  )
  pause
運行結果:(每次運行不同)
隨機數:91
隨機數:67
隨機數:58
隨機數:26
隨機數:20
請按任意鍵繼續. . .

求餘數運算set /a randomNum=!random!%%100中的100能夠是1~32768之間的任意整數。

總結:利用系統變量%random%,求餘數運算%%,字符串處理等,能夠實現不少隨機處理。


思考題目:生成給定位數的隨機密碼
解答思路:將26個英文字母或10數字以及其它特殊字符組成一個字符串,隨機抽取其中的若干字符。
參考答案1:(簡單)
@echo off
call :randomPassword 5 pass1 pass2
echo %pass1% %pass2% 
pause
exit

:randomPassword
::---------
生成隨機密碼
::---------%1
爲密碼長度,%2及之後爲返回變量名稱
::---------for
命令最多隻能區分31個字段
@echo off
set password_len=%1
if not defined password_len goto :eof
if %password_len% lss 1 goto :eof
set wordset=a b c d e f g h i j k l m n o p q r s t u v w x y z
set return=
set num=0
:randomPassword1
set /a num+=1
set /a numof=%random%%%26+1
for /f "tokens=%numof% delims= " %%i in ("%wordset%") do set return=%return%%%i
if %num% lss %password_len% goto randomPassword1
if not "%2"=="" set %2=%return%
shift /2
if not "%2"=="" goto randomPassword
goto :eof


參考答案2:(最優)
@echo off
call :randomPassword 6 pass1 pass2 pass3
echo %pass1% %pass2% %pass3%
pause
exit

:randomPassword
::---------
生成隨機密碼
::---------%1
爲密碼長度,%2及之後爲返回變量名稱
::---------goto
循環、變量嵌套、命令嵌套
@echo off
if "%1"=="" goto :eof
if %1 lss 1 goto :eof
set password_len=%1
set return=
set wordset=abcdefghijklmnopqrstuvwxyz023456789_
::---------------------------
循環
:randomPassword1
set /a numof=%random%%%36
call set return=%return%%%wordset:~%numof%,1%%
set /a password_len-=1
if %password_len% gtr 0 goto randomPassword1
::---------------------------
循環
if not "%2"=="" set %2=%return%
shift /2
if not "%2"=="" goto randomPassword
goto :eof
說明:本例涉及到變量嵌套和命令嵌套的應用,見後。

9.)變量嵌套 與 命令嵌套

    和其它編程語言相比,dos功能顯得相對簡單,要實現比較複雜的功能,須要充分運用各類技巧,變量嵌套與命令嵌套就是此類技巧之一。
先複習一下前面的「字符串截取」的關鍵內容:


**********************************************
截取功能統一語法格式爲:%a:~[m[,n]]%
**********************************************
方括號表示可選,%爲變量標識符,a爲變量名,不可少,冒號用於分隔變量名和說明部分,符號~能夠簡單理解爲「偏移」便可,m爲偏移量(缺省爲0),n爲截取長度(缺省爲所有)。
百分號若是須要當成單一字符,必須寫成%%
以上是dos變量處理的通用格式,若是其中的m、n爲變量,那麼這種狀況就是變量嵌套了。

好比設變量word爲「abcdefghij」,變量num爲「123456789」
%word:~4,1%爲e,其中4能夠從變量num中取值,即%num:~3,1%,寫成組合形式以下:
%word:~%num:~3,1%,1% 經測試這種寫法不能正確執行,寫成%word:~(%num:~3,1%),1%一樣不行,那麼,怎麼實現這種變量嵌套呢?這就必須結合命令嵌套。

什麼是命令嵌套呢?簡單的說,首先用一條dos命令生成一個字符串,而這個字符串是另外一條dos命令,用call語句調用字符串將其執行,從而獲得最終結果。
例:用call語句實現命令嵌套
@echo off
set str1=aaa echo ok bbb
echo
初始字符串:%str1%
echo
生成命令字符串以下:
echo %str1:~4,7%
echo
運行命令字符串生成最終結果爲:
call %str1:~4,7%
pause

運行顯示:
初始字符串:aaa echo ok bbb
生成命令字符串以下:
echo ok
運行命令字符串生成最終結果爲:
ok
請按任意鍵繼續. . . 

 

8、本身寫的功能Bat程序

//Win2K三、Win2K8安裝.netFramework3.5

@echo off

::==========>>>dotNet3.5sp1離線包的安裝過程<<<==========

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.1)設置安裝文件目錄及備份註冊表信息

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

      set currPath=!currPath!

) else (

      set currPath=!currPath!\

)

set instPath=!currPath!CN_DotNetFx35sp1_x86_x64_K3K8\

::

::echo %currPath%

::echo %instPath%

::echo %errorCode%

::

echo 正在安裝.Net Framework 3.5 Sp1,安裝完成後將會自動退出。

echo 安裝須要5~10分鐘請您耐心等待...

!instPath!dotNetFx35setup.exe /QB /norestart

exit /b

 

// Win2K8R2安裝.netFramework3.5

@echo off

::==========>>>dotNet3.5sp1安裝過程<<<==========

echo 正在安裝.Net Framework 3.5 Sp1,安裝完成後將會自動退出。

echo 安裝須要5~10分鐘請您耐心等待...

start /w pkgmgr /iu:NetFx2-ServerCore;NetFx2-ServerCore-WOW64;NetFx3-ServerCore;NetFx3-ServerCore-WOW64;

exit /b

//Win2K3、Win2K8、Win2K8R2安裝.netFramework4.0

@echo off

::==========>>>dotNet4.0Full離線包的安裝過程<<<==========

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.1)設置安裝文件目錄及備份註冊表信息

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

      set currPath=!currPath!

) else (

      set currPath=!currPath!\

)

set instPath=!currPath!CN_DotNetFx40_x86_x64_K3K8K8r2\

::

::echo %currPath%

::echo %instPath%

::echo %errorCode%

::

echo 正在安裝.Net Framework 4.0 Full,安裝完成後將會自動退出。

echo 安裝須要5~10分鐘請您耐心等待...

!instPath!dotNetFx40_Full_x86_x64.exe /passive /norestart

exit /b

 

//Win2K3安裝IIS6.0

@echo off

::==========>>>IIS6.0的安裝過程<<<==========

echo 正在安裝(IIS6.0)Internet Information Service,安裝完成後將會自動退出。

echo 安裝須要1~3分鐘,請您耐心等待...

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.1)設置安裝文件目錄及備份註冊表信息

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

                set currPath=!currPath!

) else (

                set currPath=!currPath!\

)

set instPath=!currPath!CN_IIS60_X86_K3\

set exptPath=!currPath!iislog.txt

::

@echo off>!exptPath!

echo [%date:~0,10% %time:~0,8%] 開始安裝IIS6.0...>>!exptPath!

echo 安裝路徑:!instPath!>>!exptPath!

echo 日誌路徑:!exptPath!>>!exptPath!

::

::echo %currPath%

::echo %instPath%

::echo %errorCode%

::

::備份原系統的Windows安裝文件的路徑

echo [%date:~0,10% %time:~0,8%] 備份原系統的Windows安裝文件的路徑>>!exptPath!

echo Windows Registry Editor Version 5.00 >!currPath!srcregbak.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup] >>!currPath!srcregbak.reg

for /f "tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup /v ServicePackSourcePath') do (

                set result=%%i

                set result=!result:\=\\!

                echo "ServicePackSourcePath"="!result!"

) >>!currPath!srcregbak.reg

for /f "tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup /v SourcePath') do (

                set result=%%i

                set result=!result:\=\\!

                echo "SourcePath"="!result!"

) >>!currPath!srcregbak.reg

echo [%date:~0,10% %time:~0,8%] 備份完畢>>!exptPath!

::

::經過生成reg文件, 更改Windows安裝文件的默認路徑

echo [%date:~0,10% %time:~0,8%] 更改Windows安裝文件的默認路徑>>!exptPath!

echo Windows Registry Editor Version 5.00 >!currPath!setupreg.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup] >>!currPath!setupreg.reg

echo "ServicePackSourcePath"="!instPath:\=\\!" >>!currPath!setupreg.reg

echo "SourcePath"="!instPath:\=\\!" >>!currPath!setupreg.reg

::

::reg文件生成成功

if %ERRORLEVEL% GTR 0 (set errorCode=IIS-INST-[1]&&goto end)

::(1.2)導入註冊表設置後, 刪除臨時文件

regedit /S !currPath!setupreg.reg

::del !currPath!setupreg.reg

echo [%date:~0,10% %time:~0,8%] 默認路徑修改完畢>>!exptPath!

::

if %ERRORLEVEL% GTR 0 (set errorCode=IIS-INST-[2]&&goto end)

::

echo [%date:~0,10% %time:~0,8%] 正在生成配置文件...>>!exptPath!

::(1.3)生成IIS無人值守安裝選項文件

echo [Components] > !currPath!iis.txt

echo iis_common = ON >> !currPath!iis.txt

echo iis_www = ON >> !currPath!iis.txt

echo iis_www_vdir_scripts = ON >> !currPath!iis.txt

echo iis_asp = ON >> !currPath!iis.txt

echo iis_inetmgr = ON >> !currPath!iis.txt

echo aspnet= ON  >> !currPath!iis.txt

::

echo [%date:~0,10% %time:~0,8%] 配置文件生成完畢>>!exptPath!

if %ERRORLEVEL% GTR 0 (set errorCode=IIS-INST-[3]&&goto end)

::

echo [%date:~0,10% %time:~0,8%] 執行安裝...>>!exptPath!

::(1.4)執行IIS安裝

Sysocmgr.exe /i:sysoc.inf /u:!currPath!iis.txt

::del !currPath!\iis.txt

::

echo [%date:~0,10% %time:~0,8%] 安裝執行完畢>>!exptPath!

::echo IIS6安裝完畢

::

if %ERRORLEVEL% GTR 0 (set errorCode=IIS-INST-[4]&&goto end)

::

echo [%date:~0,10% %time:~0,8%] 還原Windows默認安裝文件路徑...>>!exptPath!

::(1.5)恢復原系統的Windows安裝文件的路徑

regedit /S !currPath!srcregbak.reg

::del !currPath!\srcregbak.reg

echo [%date:~0,10% %time:~0,8%] 默認路徑已還原>>!exptPath!

::

if %ERRORLEVEL% GTR 0 (set errorCode=IIS-INST-[5]&&goto end)

::

 

:end

::echo !errorCode! > !currPath!result.txt

echo [%date:~0,10% %time:~0,8%] 正在清除臨時文件...>>!exptPath!

regedit /S !currPath!srcregbak.reg

del !currPath!setupreg.reg /q

del !currPath!iis.txt /q

del !currPath!srcregbak.reg /q

echo [%date:~0,10% %time:~0,8%] 已成功安裝IIS6.0>>!exptPath!

::

:end

exit /b !errorCode!

 

//Win2K3刪除IIS6.0

@echo off

::==========>>>IIS6.0的卸載過程<<<==========

echo 正在卸載(IIS6.0)Internet Information Service,安裝完成後將會自動退出。

echo 安裝須要1~3分鐘,請您耐心等待...

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.0)設置安裝文件目錄及備份註冊表信息

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

                set currPath=!currPath!

) else (

                set currPath=!currPath!\

)

set exptPath=!currPath!iislog.txt

::

@echo off>!exptPath!

echo [%date:~0,10% %time:~0,8%] 開始卸載IIS6.0...>>!exptPath!

::echo %currPath%

::echo %errorCode%

echo [%date:~0,10% %time:~0,8%] 正在生成配置文件...>>!exptPath!

::

::(1.1)生成IIS無人值守安裝選項文件

echo [Components] > !currPath!iis.txt

echo iis_common = OFF >> !currPath!iis.txt

echo iis_www = OFF >> !currPath!iis.txt

echo iis_www_vdir_scripts = OFF >> !currPath!iis.txt

echo iis_asp = OFF >> !currPath!iis.txt

echo iis_inetmgr = OFF >> !currPath!iis.txt

echo aspnet= OFF  >> !currPath!iis.txt

::

echo [%date:~0,10% %time:~0,8%] 配置文件生成完畢>>!exptPath!

if %ERRORLEVEL% GTR 0 (set errorCode=IIS-UNINST-[1]&&goto end)

::

echo [%date:~0,10% %time:~0,8%] 執行卸載...>>!exptPath!

::(1.2)執行IIS安裝

Sysocmgr.exe /i:sysoc.inf /u:!currPath!iis.txt

::del !currPath!\iis.txt

echo [%date:~0,10% %time:~0,8%] 卸載執行完畢>>!exptPath!

::

if %ERRORLEVEL% GTR 0 (set errorCode=IIS-UNINST-[2]&&goto end)

::

 

:end

::echo !errorCode! > !currPath!\result.txt

echo [%date:~0,10% %time:~0,8%] 正在清除臨時文件...>>!exptPath!

del !currPath!iis.txt /q

echo [%date:~0,10% %time:~0,8%] 已成功卸載IIS6.0>>!exptPath!

::

:end

exit /b !errorCode!

 

//Win2K8安裝IIS7.0

@echo off

::==========>>>IIS7.0安裝過程<<<==========

echo 正在安裝(IIS7.0)Internet Information Service,安裝完成後將會自動退出。

echo 安裝須要1~3分鐘,請您耐心等待...

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.1)設置安裝文件目錄及備份註冊表信息

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

                set currPath=!currPath!

) else (

                set currPath=!currPath!\

)

set exptPath=!currPath!iislog.txt

::

@echo off>!exptPath!

echo [%date:~0,10% %time:~0,8%] 開始安裝IIS7.0...>>!exptPath!

echo 日誌路徑:!exptPath!>>!exptPath!

::

echo [%date:~0,10% %time:~0,8%] 執行安裝...>>!exptPath!

::

start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-CGI;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementScriptingTools;IIS-ManagementService;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;WAS-WindowsActivationService;WAS-ProcessModel;IIS-FTPServer;WAS-NetFxEnvironment;WAS-ConfigurationAPI;IIS-FTPManagement;IIS-FTPPublishingService;IIS-ManagementConsole;IIS-LegacySnapIn

::

echo [%date:~0,10% %time:~0,8%] 已成功安裝IIS7.0>>!exptPath!

::

exit /b

 

//Win2K8卸載IIS7.0

@echo off

::==========>>>IIS7.0卸載過程<<<==========

echo 正在卸載(IIS7.0)Internet Information Service,安裝完成後將會自動退出。

echo 安裝須要1~3分鐘,請您耐心等待...

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.1)設置安裝文件目錄及備份註冊表信息

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

                set currPath=!currPath!

) else (

                set currPath=!currPath!\

)

set exptPath=!currPath!iislog.txt

::

@echo off>!exptPath!

echo [%date:~0,10% %time:~0,8%] 開始卸載IIS7.0...>>!exptPath!

echo 日誌路徑:!exptPath!>>!exptPath!

::

echo [%date:~0,10% %time:~0,8%] 執行卸載...>>!exptPath!

::

start /w pkgmgr /uu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-CGI;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementScriptingTools;IIS-ManagementService;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;WAS-WindowsActivationService;WAS-ProcessModel;IIS-FTPServer;WAS-NetFxEnvironment;WAS-ConfigurationAPI;IIS-FTPManagement;IIS-FTPPublishingService;IIS-ManagementConsole;IIS-LegacySnapIn

::

echo [%date:~0,10% %time:~0,8%] 已成功卸載IIS7.0>>!exptPath!

::

exit /b

 

//Win2K8R2安裝IIS7.5

@echo off

::==========>>>IIS7.5安裝過程<<<==========

echo 正在安裝(IIS7.5)Internet Information Service,安裝完成後將會自動退出。

echo 安裝須要1~3分鐘,請您耐心等待...

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.1)設置安裝文件目錄及備份註冊表信息

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

                set currPath=!currPath!

) else (

                set currPath=!currPath!\

)

set exptPath=!currPath!iislog.txt

::

@echo off>!exptPath!

echo [%date:~0,10% %time:~0,8%] 開始安裝IIS7.5...>>!exptPath!

echo 日誌路徑:!exptPath!>>!exptPath!

::

echo [%date:~0,10% %time:~0,8%] 執行安裝...>>!exptPath!

::

START /w PKGMGR /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-CGI;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementConsole;IIS-ManagementScriptingTools;IIS-ManagementService;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;IIS-LegacySnapIn;WAS-WindowsActivationService;WAS-ProcessModel;IIS-FTPServer;IIS-FTPSvc;IIS-FTPExtensibility;IIS-WebDAV;WAS-NetFxEnvironment;WAS-ConfigurationAPI

::

echo [%date:~0,10% %time:~0,8%] 已成功安裝IIS7.5>>!exptPath!

::

exit /b

 

//Win2K8R2 卸載IIS7.5

@echo off

::==========>>>IIS7.5卸載過程<<<==========

echo 正在卸載(IIS7.5)Internet Information Service,安裝完成後將會自動退出。

echo 安裝須要1~3分鐘,請您耐心等待...

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.1)設置安裝文件目錄及備份註冊表信息

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

                set currPath=!currPath!

) else (

                set currPath=!currPath!\

)

set exptPath=!currPath!iislog.txt

::

@echo off>!exptPath!

echo [%date:~0,10% %time:~0,8%] 開始卸載IIS7.5...>>!exptPath!

echo 日誌路徑:!exptPath!>>!exptPath!

::

echo [%date:~0,10% %time:~0,8%] 執行卸載...>>!exptPath!

::

START /w PKGMGR /uu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-CGI;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementConsole;IIS-ManagementScriptingTools;IIS-ManagementService;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;IIS-LegacySnapIn;WAS-WindowsActivationService;WAS-ProcessModel;IIS-FTPServer;IIS-FTPSvc;IIS-FTPExtensibility;IIS-WebDAV;WAS-NetFxEnvironment;WAS-ConfigurationAPI

::

echo [%date:~0,10% %time:~0,8%] 已成功卸載IIS7.5>>!exptPath!

::

exit /b

 

//從新註冊ASP.Net到IIS

@echo off

::==========>>>註冊DotNet到IIS中<<<==========

::

::開啓延時加載

setlocal enabledelayedexpansion

::(1.1)設置安裝文件目錄

set /p sysBit=請輸入當前操做系統的位數(x86 or x64)

set /p frmVer=請輸入要使用的DotNetFramework版本(2.0、3.0、3.5 or 4.0)

::

echo 即將在!sysBit!系統中應用DotNet框架版本!frmVer!

echo 正在爲IIS從新註冊Asp.Net...

echo 註冊過程須要1~2分鐘,註冊完成後會自動退出,請耐心等候...

::

set baseFrmPath=

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

                set currPath=!currPath!

) else (

                set currPath=!currPath!\

)

if {!frmVer!}=={3.0} (

                set frmVer=v3.0

) else if {!frmVer!}=={3.5} (

                set frmVer=v3.5

) else if {!frmVer!}=={4.0} (

                set frmVer=v4.0.30319

) else (

                set frmVer=v2.0.50727

)

::

if {!sysBit!}=={x64} (

                set baseFrmPath=%windir%\Microsoft.NET\Framework64\!frmVer!\

) else (

                set baseFrmPath=%windir%\Microsoft.NET\Framework\!frmVer!\

)

::從新註冊DotNet到IIS

if {"!baseFrmPath!"} NEQ {""} (

                !baseFrmPath!aspnet_regiis -i

)

::

exit /b

 

//MySql安裝過程

::(4.1)拷貝默認的數據文件

xcopy !instPath!dataBak\Origin\data !instPath!data /I /E /Y

echo [%date:~0,10% %time:~0,8%] 文件拷貝完成>>!exptPath!

::

echo [%date:~0,10% %time:~0,8%] 正在生成配置文件my.ini...>>!exptPath!

::(4.2)生成my.ini

call !instPath!mysqlConf\mysqlconf.bat !instPath! !instPath!

::

echo [%date:~0,10% %time:~0,8%] 配置文件生成完成>>!exptPath!

::(4.3)安裝Mysql

echo [%date:~0,10% %time:~0,8%] 嘗試卸載現有的Mysql服務...>>!exptPath!

net stop mysql

!instPath!bin\mysqld.exe --remove mysql

::

echo [%date:~0,10% %time:~0,8%] 卸載服務嘗試完成>>!exptPath!

::

echo [%date:~0,10% %time:~0,8%] 正在安裝Mysql服務...>>!exptPath!

::

!instPath!bin\mysqld.exe --install mysql --defaults-file="!instPath!my.ini"

::

echo [%date:~0,10% %time:~0,8%] 服務安裝完成>>!exptPath!

::

if %ERRORLEVEL% GTR 0 (set errorCode=Mysql-INST-[1]&&goto end)

::

::(4.2)啓動Mysql服務並修改Mysql密碼

::echo !uPass!

echo [%date:~0,10% %time:~0,8%] 正在啓動Mysql服務並修改root用戶密碼...>>!exptPath!

net start mysql

!instPath!bin\mysql -uroot -e "update mysql.user set password=PASSWORD('!uPass!') where User='root'; flush privileges;"

::

echo [%date:~0,10% %time:~0,8%] Mysql服務已啓動>>!exptPath!

if %ERRORLEVEL% GTR 0 (set errorCode=Mysql-INST-[2]&&goto end)

::

::(4.3)修改系統Path路徑,添加Mysql路徑

echo [%date:~0,10% %time:~0,8%] 正在修改操做系統Path環境變量...>>!exptPath!

call !instPath!mysqlConf\SysPath.bat !instPath!bin /add

::

::(4.4)Flush系統Path路徑, 達到不重啓直接是Path路徑生效

call !instPath!mysqlConf\flushPath.exe

echo [%date:~0,10% %time:~0,8%] Path環境變量修改完成>>!exptPath!

echo [%date:~0,10% %time:~0,8%] Mysql5.1.58已成功安裝>>!exptPath!

::

:end

exit /b !errorCode!   

 

//卸載Mysql

@echo off

::==========>>>Mysql的卸載過程<<<==========

::

::開啓延時加載

setlocal enabledelayedexpansion

set uPass=

::設置安裝文件目錄

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

      set currPath=!currPath!

) else (

      set currPath=!currPath!\

)

set instPath=!currPath!Mysql501058\

set exptPath=!currPath!mysqllog.txt

::獲取windows根目錄

cd /d %windir%

cd\

set sysDrvLetter=%cd%

::

::

::echo %errorCode%

::echo %currPath%

::echo %instPath%

::echo %sysDrvLetter%

::

::

echo [%date:~0,10% %time:~0,8%] 開始卸載Mysql5.1.58...>>!exptPath!

echo [%date:~0,10% %time:~0,8%] 正在備份現有數據文件...>>!exptPath!

::(4.1)備份現有數據文件

call !instPath!mysqlConf\getTimestampDir.bat

set dirName=%errorlevel%

::echo !dirName!

::建立以時間爲名稱的備份目錄

mkdir !instPath!dataBak\!dirName!

::

::(4.2)卸載Mysql

echo [%date:~0,10% %time:~0,8%] 正在中止Mysql服務...>>!exptPath!

net stop mysql

::備份數據文件

move /y !instPath!data !instPath!dataBak\!dirName!

echo [%date:~0,10% %time:~0,8%] 數據文件備份完成>>!exptPath!

::

::卸載mysql

echo [%date:~0,10% %time:~0,8%] 正在執行卸載...>>!exptPath!

!instPath!bin\mysqld.exe --remove mysql

::

if %ERRORLEVEL% GTR 0 (set errorCode=Mysql-UNINST-[1]&&goto end)

::

::(4.3)修改系統Path路徑,添加Mysql路徑

echo [%date:~0,10% %time:~0,8%] 正在修改系統Path環境變量...>>!exptPath!

call !instPath!mysqlConf\SysPath.bat !instPath!bin /del

::

::(4.4)Flush系統Path路徑, 達到不重啓直接是Path路徑生效

call !instPath!mysqlConf\flushPath.exe

::

echo [%date:~0,10% %time:~0,8%] Path環境變量修改完成>>!exptPath!

echo [%date:~0,10% %time:~0,8%] Mysql5.1.58已成功卸載>>!exptPath!

::

:end

exit /b !errorCode!   

 

 

//配置MySql

@echo off

::生成fcgiext.ini文件

::開啓延時加載

setlocal enabledelayedexpansion

set exptPath=%1

set mysqlPath=%2

::echo !exptPath!

::echo !mysqlPath!

::

del !exptPath!my.ini /q

@echo off>!exptPath!my.ini

set tmpStr=

for /f "tokens=* eol=" %%i in (!exptPath!mysqlConf\mysqlOrigin.ini) do (

      set tmpStr=%%i

      if "!tmpStr!" == "datadir=" (

            set tmpStr=!tmpStr! "!mysqlPath!data"

      )

      if "!tmpStr!" == "slow_query_log_file=" (

            set tmpStr=!tmpStr! "!mysqlPath!log\slow.log"

      )

      echo !tmpStr!

)>>!exptPath!my.ini

::

::

exit /b

 

//獲取時間戳

@echo off

::生成fcgiext.ini文件

::開啓延時加載

setlocal enabledelayedexpansion

::

set date=%date:~2,8%

set time=%time:~0,5%

set date=!date:-=!

set time=!time::=!

exit /b !date!!time!

 

//修改系統Path變量

@echo off

::==========>>>添加/刪除系統Path變量的指定內容<<<==========

::開啓延時加載

setlocal enabledelayedexpansion

set pathContent=%1

set opType=%2

::echo !pathContent!

::

::echo PATH=%path%

if not "!pathContent!"=="" (

      set tmpStr=

      set pathStr=

      for %%i in (%path%) do (

            set tmpStr=%%i

            if {!tmpStr!} NEQ {!pathContent!} (

                  set pathStr=!pathStr!!tmpStr!;

            )

      )

      if {!opType!}=={/add} (

            set pathStr=!pathStr!!pathContent!;

      )

      set pathStr=!pathStr:~0,-1!

::WMIC首次使用會佔用必定的初始化時間, 如下會永久改變path

::%windir%\system32\wbem\wmic.exe ENVIRONMENT where "name='path' and username='<system>'" set VariableValue='!pathStr!'

wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="!pathStr!"

::如下這個只能臨時改變Path,不能永久改變

::set path="!pathStr!"

)

exit /b

 

//安裝FastCgi

@echo off

::==========>>>PHP5.2.17的安裝過程<<<==========

::

::開啓延時加載

setlocal enabledelayedexpansion

::設置安裝文件目錄

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

      set currPath=!currPath!

) else (

      set currPath=!currPath!\

)

set instPath=!currPath!PHP502017\

set exptPath=!currPath!phplog.txt

::獲取windows根目錄

cd /d %windir%

cd\

set sysDrvLetter=%cd%

::

::echo %errorCode%

::echo %currPath%

::echo %instPath%

::echo %sysDrvLetter%

::

echo [%date:~0,10% %time:~0,8%] 開始安裝PHP5.2.17...>>!exptPath!

echo [%date:~0,10% %time:~0,8%] 正在拷貝php支持文件...>>!exptPath!

::(2.1)拷貝php支持文件到System32目錄

copy !instPath!winLib\*.* %windir%\System32\ /y

::

echo [%date:~0,10% %time:~0,8%] php支持文件拷貝完成>>!exptPath!

if %ERRORLEVEL% GTR 0 (set errorCode=PHP-INST-[1]&&goto end)

::

::(2.2)配置php.ini

echo [%date:~0,10% %time:~0,8%] 正在生成配置文件php.ini...>>!exptPath!

call !instPath!phpconf\phpconf.bat !instPath! !instPath!

echo [%date:~0,10% %time:~0,8%] php.ini配置文件生成完畢>>!exptPath!

::

::(2.3)配置FastCgi15的支持

echo [%date:~0,10% %time:~0,8%] 正在安裝FastCgi1.5...>>!exptPath!

call  !currPath!\FastCgi15\FastCgi15_x86_K3_add.bat !currPath!\FastCgi15\ !instPath!

echo [%date:~0,10% %time:~0,8%] FastCgi1.5安裝完畢>>!exptPath!

echo [%date:~0,10% %time:~0,8%] PHP5.2.17已成功安裝>>!exptPath!

:end

exit /b !errorCode!                        

 

//卸載FastCgi

@echo off

::==========>>>PHP5.2.17的卸載過程<<<==========

::

::開啓延時加載

setlocal enabledelayedexpansion

::設置安裝文件目錄

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

      set currPath=!currPath!

) else (

      set currPath=!currPath!\

)

set instPath=!currPath!PHP502017\

set exptPath=!currPath!phplog.txt

::獲取windows根目錄

cd /d %windir%

cd\

set sysDrvLetter=%cd%

::

::echo %errorCode%

::echo %currPath%

::echo %instPath%

::echo %sysDrvLetter%

::

echo [%date:~0,10% %time:~0,8%] 開始卸載PHP5.2.17...>>!exptPath!

echo [%date:~0,10% %time:~0,8%] 正在刪除php支持文件...>>!exptPath!

::(2.1)從System32目錄刪除php支持文件

del %windir%\System32\libeay32.dll /q

del %windir%\System32\libmcrypt.dll /q

del %windir%\System32\libmysql.dll /q

del %windir%\System32\ssleay32.dll /q

if %ERRORLEVEL% GTR 0 (set errorCode=PHP-INST-[1]&&goto end)

::

::(2.2)卸載fastcgi15支持

echo [%date:~0,10% %time:~0,8%] 正在卸載FastCgi1.5...>>!exptPath!

call  !currPath!\FastCgi15\FastCgi15_x86_K3_del.bat !currPath!\FastCgi15\

echo [%date:~0,10% %time:~0,8%] FastCgi1.5卸載完畢>>!exptPath!

::

echo [%date:~0,10% %time:~0,8%] PHP5.2.17已成功卸載>>!exptPath!

:end

exit /b !errorCode!                        

 

//配置FastCgi

@echo off

::生成fcgiext.ini文件

::開啓延時加載

setlocal enabledelayedexpansion

set exptPath=%1

set phpPath=%2

::echo !exptPath!

::echo !phpPath!

::設置安裝文件目錄

cd /d !exptPath!

cd..

set currPath=%cd%

::echo !currPath!

::

del !exptPath!fcgiext.ini /q

@echo off>!exptPath!fcgiext.ini

for /f "tokens=* eol=" %%i in (!currPath!\conf\fcgiext_Orign.ini) do (

      echo %%i

)>>!exptPath!fcgiext.ini

echo php^=PHP >>!exptPath!fcgiext.ini

echo.>>!exptPath!fcgiext.ini

echo [PHP] >>!exptPath!fcgiext.ini

echo ExePath^=!phpPath!php-cgi.exe >>!exptPath!fcgiext.ini

::

::

exit /b

 

//IIS6.0修改ScriptMaps

@echo off

::==========>>>IIS60_應用程序擴展映射的刪除<<<==========

::開啓延時加載

setlocal enabledelayedexpansion

set exptPath=%1

set opType=%2

::echo !exptPath!

::註冊默認的腳本宿主爲: Cscript

wscript //b //h:cscript

::

::附加.php應用程序擴展映射

::(1.1)iiscnfg導出IIS的配置文件

iiscnfg /export /f !exptPath!IISConfigBak.xml /sp /lm/w3svc

::

::(1.2)獲取SessionKey的值

for /f "tokens=*" %%i in ('findstr "SessionKey\=\".*\"" !exptPath!IISConfigBak.xml') do (

      set sessionKey=%%i

      set sessionKey=!sessionKey:SessionKey=!

      set sessionKey=!sessionKey:"=!

)

::去掉=

for /f "delims==" %%i in ("!sessionKey!") do (

      set sessionKey=%%i

)

::echo !sessionKey!

::(1.3)替換掉iisphpconf中的SessionKey字符串, 並添加.php映射

if {!opType!} == {/add} (

      call !exptPath!conf\iisphpconf.bat !exptPath!IISConfig.xml !sessionKey! /add

) else (

      call !exptPath!conf\iisphpconf.bat !exptPath!IISConfig.xml !sessionKey! /del 

)

::

::(1.4)iiscnfgiisconfig.xml導入IIS

iiscnfg /import /f !exptPath!iisconfig.xml /sp /lm/w3svc /dp /lm/w3svc /merge

::

::(1.5)刪除IISConfigBak.xml文件和IISConfig.xml文件

del !exptPath!IISConfigBak.xml /q

del !exptPath!IISConfig.xml /q

::

::將默認的腳本宿主程序恢復爲:WScript

wscript //b //h:wscript

 

 

//安裝Php

@echo off

::==========>>>PHP5.2.17的安裝過程<<<==========

::

::開啓延時加載

setlocal enabledelayedexpansion

::設置安裝文件目錄

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

      set currPath=!currPath!

) else (

      set currPath=!currPath!\

)

set instPath=!currPath!PHP502017\

set exptPath=!currPath!phplog.txt

::獲取windows根目錄

cd /d %windir%

cd\

set sysDrvLetter=%cd%

::

::echo %errorCode%

::echo %currPath%

::echo %instPath%

::echo %sysDrvLetter%

::

echo [%date:~0,10% %time:~0,8%] 開始安裝PHP5.2.17...>>!exptPath!

echo [%date:~0,10% %time:~0,8%] 正在拷貝php支持文件...>>!exptPath!

::(2.1)拷貝php支持文件到System32目錄

copy !instPath!winLib\*.* %windir%\System32\ /y

::

echo [%date:~0,10% %time:~0,8%] php支持文件拷貝完成>>!exptPath!

if %ERRORLEVEL% GTR 0 (set errorCode=PHP-INST-[1]&&goto end)

::

::(2.2)配置php.ini

echo [%date:~0,10% %time:~0,8%] 正在生成配置文件php.ini...>>!exptPath!

call !instPath!phpconf\phpconf.bat !instPath! !instPath!

echo [%date:~0,10% %time:~0,8%] php.ini配置文件生成完畢>>!exptPath!

::

::(2.3)配置FastCgi15的支持

echo [%date:~0,10% %time:~0,8%] 正在安裝FastCgi1.5...>>!exptPath!

call  !currPath!\FastCgi15\FastCgi15_x86_K3_add.bat !currPath!\FastCgi15\ !instPath!

echo [%date:~0,10% %time:~0,8%] FastCgi1.5安裝完畢>>!exptPath!

echo [%date:~0,10% %time:~0,8%] PHP5.2.17已成功安裝>>!exptPath!

:end

exit /b !errorCode!                         

 

//卸載Php

@echo off

::==========>>>PHP5.2.17的卸載過程<<<==========

::

::開啓延時加載

setlocal enabledelayedexpansion

::設置安裝文件目錄

set errorCode=0

set currPath=%cd%

set endFlag=!currPath:~-1!

if {!endFlag!}=={\} (

      set currPath=!currPath!

) else (

      set currPath=!currPath!\

)

set instPath=!currPath!PHP502017\

set exptPath=!currPath!phplog.txt

::獲取windows根目錄

cd /d %windir%

cd\

set sysDrvLetter=%cd%

::

::echo %errorCode%

::echo %currPath%

::echo %instPath%

::echo %sysDrvLetter%

::

echo [%date:~0,10% %time:~0,8%] 開始卸載PHP5.2.17...>>!exptPath!

echo [%date:~0,10% %time:~0,8%] 正在刪除php支持文件...>>!exptPath!

::(2.1)從System32目錄刪除php支持文件

del %windir%\System32\libeay32.dll /q

del %windir%\System32\libmcrypt.dll /q

del %windir%\System32\libmysql.dll /q

del %windir%\System32\ssleay32.dll /q

if %ERRORLEVEL% GTR 0 (set errorCode=PHP-INST-[1]&&goto end)

::

::(2.2)卸載fastcgi15支持

echo [%date:~0,10% %time:~0,8%] 正在卸載FastCgi1.5...>>!exptPath!

call  !currPath!\FastCgi15\FastCgi15_x86_K3_del.bat !currPath!\FastCgi15\

echo [%date:~0,10% %time:~0,8%] FastCgi1.5卸載完畢>>!exptPath!

::

echo [%date:~0,10% %time:~0,8%] PHP5.2.17已成功卸載>>!exptPath!

:end

exit /b !errorCode!                        

 

//配置Php

@echo off

::生成fcgiext.ini文件

::開啓延時加載

setlocal enabledelayedexpansion

set exptPath=%1

set phpPath=%2

::echo !exptPath!

::echo !phpPath!

::

del !exptPath!php.ini /q

@echo off>!exptPath!php.ini

set tmpStr=

for /f "tokens=* eol=" %%i in (!exptPath!\phpconf\phpConfOrigin.ini) do (

      set tmpStr=%%i

      if "!tmpStr!" == "extension_dir =" (

            set tmpStr=!tmpStr! "!phpPath!ext"

      )

      if "!tmpStr!" == "upload_tmp_dir =" (

            set tmpStr=!tmpStr! "%windir%\Temp"

      )

      echo !tmpStr!

)>>!exptPath!php.ini

::

::

exit /b

相關文章
相關標籤/搜索