?? 第七章 dos編程高級技巧.txt
字號:
一、交互界面設計
沒啥說的,看看高手設計的菜單界面吧:
@echo off&title DOS資源站 www.cmdos.net
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
只要學完本教程前面的章節,上面的程序應該能看懂了。
二、if…else…條件語句
前面已經談到,DOS條件語句主要有以下形式
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
增強用法:IF [/i] string1 compare-op string2 command
增強用法中加上/I就不區分大小寫了!
增強用法中還有一些用來判斷數字的符號:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
上面的command命令都可以用小括號來使用多條命令的組合,包括else子句,組合命令中可以嵌套使用條件或循環命令。
例如:
IF EXIST filename (
del filename
) ELSE (
echo filename missing
)
也可寫成:
if exist filename (del filename) else (echo filename missing)
但這種寫法不適合命令太多或嵌套命令的使用。
三、循環語句
1、指定次數循環
FOR /L %variable IN (start,step,end) DO command [command-parameters]
組合命令:
FOR /L %variable IN (start,step,end) DO (
Command1
Command2
……
)
2、對某集合執行循環語句。
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 對每個文件執行的命令,可用小括號使用多條命令組合。
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的
FOR 語句。如果在 /R 后沒有指定目錄,則使用當前
目錄。如果集僅為一個單點(.)字符,則枚舉該目錄樹。
同前面一樣,command可以用括號來組合:
FOR /R [[drive:]path] %variable IN (set) DO (
Command1
Command2
……
commandn
)
3、條件循環
利用goto語句和條件判斷,dos可以實現條件循環,很簡單啦,看例子:
@echo off
set var=0
rem ************循環開始了
:continue
set /a var+=1
echo 第%var%此循環
if %var% lss 100 goto continue
rem ************循環結束了
echo 循環執行完畢
pause
四、子程序
在批處理程序中可以調用外部可運行程序,比如exe程序,也可調用其他批處理程序,這些也可以看作子程序,但是不夠方便,如果被調用的程序很多,就顯得不夠簡明了,很繁瑣。
在windowsXP中,批處理可以調用本程序中的一個程序段,相當于子程序,這些子程序一般放在主程序后面。
子程序調用格式:
CALL :label arguments
子程序語法:
:label
command1
command2
...
commandn
goto :eof
傳至子程序的參數在call語句中指定,在子程序中用%1、%2至%9的形式調用,而子程序返回主程序的數據只需在調用結束后直接引用就可以了,當然也可以指定返回變量,請看下面的例子。
子程序例1:
@echo off
call :sub return 你好
echo 子程序返回值:%return%
pause
:sub
set %1=%2
goto :eof
運行結果:你好
子程序例2:設計一個求多個整數相加的子程序
@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
運行結果:65
在win98系統中,不支持上面這種標號調用,須將子程序單獨保存為一個批處理程序,然后調用。
五、用ftp命令實現自動下載
ftp是常用的下載工具,ftp界面中有40多個常用命令,自己學習了,不介紹了。這里介紹如何用dos命令行調用ftp命令,實現ftp自動登錄,并上傳下載,并自動退出ftp程序。
其實可以將ftp命令組合保存為一個文本文件,然后用以下命令調用即可。
ftp -n -s:[[drive:]path]filename
上面的filename為ftp命令文件,包括登錄IP地址,用戶名、密碼、操作命令等
例:
open 90.52.8.3 #打開ip
user iware #用戶為iware
password8848 #密碼
bin #二進制傳輸模式
prompt
cd tmp1 #切換至iware用戶下的tmp1目錄
pwd
lcd d:\download #本地目錄
mget * #下載tmp1目錄下的所有文件
bye #退出ftp
六、用7-ZIP實現命令行壓縮和解壓功能
語法格式:(詳細情況見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)
七、調用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 語法和有效的宿主參數。
八、將批處理轉化為可執行文件:www.cmdos.net
由于批處理文件是一種文本文件,任何人都可以對其進行隨便編輯,不小心就會把里面的命令破壞掉,所以如果將其轉換成.com格式的可執行文件,不僅執行效率會大大提高,而且不會破壞原來的功能,更能將優先級提到最高。Bat2Com就可以完成這個轉換工作。
小知識:在DOS環境下,可執行文件的優先級由高到低依次為.com>.exe>.bat>.cmd,即如果在同一目錄下存在文件名相同的這四類文件,當只鍵入文件名時,DOS執行的是name.com,如果需要執行其他三個文件,則必須指定文件的全名,如name.bat。
這是一個只有5.43K大小的免費綠色工具,可以運行在純DOS或DOS窗口的命令行中,用法:Bat2Com
FileName,這樣就會在同一目錄下生成一個名為FileNme.com的可執行文件,執行的效果和原來的.bat文件一樣。
九、時間延遲
本條引用[英雄]教程
什么是時間延遲?顧名思義,就是執行一條命令后延遲一段時間再進行下一條命令。
1、利用ping命令延時
例:
@echo off
echo 延時前!
ping /n 3 127.0.0.1 >nul
echo 延時后!
pause
解說:用到了ping命令的“/n”參數,表示要發送多少次請求到指定的ip。本例中要發送3次請求到本機的ip
(127.0.0.1)。127.0.0.1可簡寫為127.1。“>nul”就是屏蔽掉ping命令所顯示的內容。
2、利用for命令延時
例:
@echo off
echo 延時前!
for /l %%i in (1,1,5000) do echo %%i>nul
echo 延時后!
pause
解說:原理很簡單,就是利用一個計次循環并屏蔽它所顯示的內容來達到延時的目的。
十、模擬進度條
下面給出一個模擬進度條的程序。如果將它運用在你自己的程序中,可以使你的程序更漂亮。
@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”是輸出每個“■”的時間間隔,即每隔多少時間輸出一個“■”。
本文來自:DOS資源站(www.cmdos.net) 詳細出處參考:http://www.cmdos.net/article/sort01/info-1709.html
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -