顯示廣告
隱藏 ✕
看板 tails
作者 tails (QQ)
標題 [筆記] MS-DOS批次檔
時間 2012年04月06日 Fri. PM 11:53:24


今天突然看到Portable版軟體有趣之處
不過Portable並不是想開這篇的重點
所以就來個簡單帶過:

Portable因為可以直接放在RAMDisk上執行
所以理論的執行速度可以嚇嚇叫
加上RAMDisk相關程式都是使用img單一檔案封裝
當封裝完成後,又可以省去Portable又多又雜的缺點

深入研究過後
就開始開心下載Portable軟體了
一不小心載太多,現在回頭一看,都快3G了
目前我的桌電才剛換4G記憶體而已
桌電上可以用到2G沒問題
但筆電也只有2G,可能只能用個512MB
所以怎麼樣才能讓它有效切換
我想到的就是Script了,也就是批次檔

題外話:
這時我就可以小小的得意一下了
想當初我剛開始學批次檔的時候
應該是國小四年級的事....沒錯!是國小!
不過當初對於IF的邏輯概念不是很明白
所以寫出來的東西只是單純的call和畫東西而已 (倚天中文系統有畫圖指令)

現在會有幾個要求就是查檔案和目錄要做簡單的判斷
然後需要讀入文字檔設定
最後再做copy的動作
這些批次檔應該都能達成
所以,來學吧O.Q



前言:
DOS因為指令不分大小寫,跟unix-like不一樣
為了表示彼此不同,所以DOS的指令會用全大寫表示
批次檔的副檔名可以為BAT或CMD
BAT是DOS下的批次檔
CMD是NT內核命令列下的另一種批次檔案,所以必需在有NT內核的Windows下才能用(NT/2000/XP/2003等)
雖然參考資料中沒講
不過我想內部指令上應該會有所不同
至於以下的指令應該都是基本會有的....吧XD
執行就如同exe/com檔一樣打檔名即可


1.ECHO [ON/OFF/string]

ON/OFF是設定C:\>批次檔的指令要不要顯示
不加參數是查看目前狀況
string的話就會回傳string訊息
總合以上所說....你不能只傳ON/OFF訊息....

此指令設定的部分通常使用在批次檔的一開始
先把指令關掉
就不會有雜七雜八的目錄在煩你了
e.g.:

ECHO OFF
ECHO 程式執行中...請稍候....


不過第一個ECHO OFF指令要怎麼讓它消失?
其實可以使用 @ 符號來抑止它

@ECHO OFF
ECHO 程式執行中...請稍候....


這時就只有第二句的string會輸出而已了


2.REM

批次檔的註解

e.g.:

REM 批次檔test1-1
@ECHO OFF
ECHO 程式執行中...請稍候....



3.PAUSE

程式暫停

e.g.:

REM 批次檔test1-1
@ECHO OFF
ECHO 程式執行中...請稍候....
REM 輸出一些東西:
ECHO 1 + 1 = 2
PAUSE



4.參數/SHIFT

有時會需要給批次檔一點引數做處理
批次檔使用時可以使用參數標記 %0 ~ %9
分別代表了第1個引數~第10個引數
其中%0代表的是指令本身

但有時候要需要用超過10引數該怎麼辦?
這時可以用SHIFT
它做的動作就是:丟掉 ← %0 ← %1 ← %2 ← %3 ← %4 ......

可加上/n選項
方向會是相反的

e.g.:

REM 批次檔test1-1
@ECHO OFF
ECHO 程式執行中...請稍候....
REM 輸出你輸入的東西:
ECHO %1 和 %2
PAUSE



5.IF

三種格式:

一、IF [NOT] "parameters/string" == "parameters/string" COMMAND

NOT代表不等於 ( != )
COMMAND代表成立時會做的命令
注意到這裡的雙引號其實是非必要
它可以避免你輸入含有空白的參數
相對的
輸入時,如果需要含空白的話,可以使用雙引號括著

e.g.:

REM 批次檔test1-1
@ECHO OFF
ECHO 程式執行中...請稍候....
REM 輸出你輸入的東西:
ECHO %1 和 %2
IF "%1" == "%2" ECHO 相等
IF NOT "%1" == "%2" ECHO 不等
PAUSE



二、IF [NOT] EXIST [PATH]FILE COMMAND

NOT同上
PATH可以是相對也可以是絕對
FILE為檔名
COMMAND同上

e.g.:

REM 批次檔test1-2
REM TYPE為顯示檔案內容
IF EXIST "%1" TYPE "%1"



三、IF ERRORLEVEL VALUE COMMAND


用來測試它的上一個DOS命令的返回值
ERRORLEVEL為程式執行結束後的返回值,應該是指像C語言程式最後的return吧。
VALUE 返回值
COMMAND 執行命令


6.GOTO

無條件跳至某一個標記繼續執行
標記為一個:(冒號)和字元所組成


REM 批次檔test1-2
REM TYPE為顯示檔案內容
IF EXIST "%1" GOTO E
IF NOT EXIST "%1" GOTO NE
:E
TYPE "%1"
GOTO END
:NE
ECHO 沒這個檔
GOTO END
:END



7.CHOICE

語法為:
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

參數列表:
/C choices 指定要創建的選項列表。預設為"YN"。
/N 在提示符中隱藏選項列表。提示前面的消息得到顯示,選項依舊處於啟用狀態。
/CS 分大小寫的選項。在預設是不分大小寫的。
/T timeout 選擇前暫停的秒數。0 到 9999。如果指定了 0,就不會有暫停。
/D choice 指預設認選項。字元必須在用 /C 選項指定的一組選擇中; 同時,必須用 /T 指定 nnnn。
/M text 指定提示之前要顯示的消息。如果沒有指定,工具只顯示提示。

此語法需配合IF ERRORLEVEL做使用

CHOICE /?
CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "選項 1 請選擇 a,選項 2 請選擇 b。"
CHOICE /C ab /N /M "選項 1 請選擇 a,選項 2 請選擇 b。"




8.FOR

重覆執行

FOR %%a IN (file1 file2 file3) DO COMMAND
虛擬變數必須以兩個百分號(%%)起頭,IN後面為參數列,DO後面跟著要執行的命令
Ex:
@echo off
FOR %%a IN (test_a.bat test_b.bat test_c.bat) DO DEL %%a


9.CALL

呼叫其他批次檔



--
目前查到就這樣了O.Q
參考網頁:
MS-DOS的批次檔
批次檔語法上
DOS指令大全
--
※ 作者: tails 時間: 2012-04-06 23:53:24
※ 編輯: tails 時間: 2012-04-10 01:18:50
※ 看板: tails 文章推薦值: 0 目前人氣: 0 累積人氣: 6709 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇