通過DELPHI小程序在WINDOWS下更好地使用DOS批處理
發(fā)表時間:2023-08-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]我們知道 DOS 下的批處理程序中,可以用 ECHO 顯示一段信息(提示信息或出錯信息),對于要接收用戶輸入的情況,MS-DOS 本身提供的外部程序就只有 CHOICE 能讓用戶輸入一個鍵,所以基本...
我們知道 DOS 下的批處理程序中,可以用 ECHO 顯示一段信息(提示信息或出錯信息),對于要接收用戶輸入的情況,MS-DOS 本身提供的外部程序就只有 CHOICE 能讓用戶輸入一個鍵,所以基本上只能用于菜單選擇。對于下述兩個需求,那就只有另外編程序了:
1、在 DOS 下的批處理程序中通過 WINDOWS 對話框顯示一段提示信息或出錯信息
2、在 DOS 下的批處理程序中通過 WINDOWS 對話框接收用戶輸入的一個字符串,并對其進行后續(xù)處理
對于這兩個問題,相信有些人已經(jīng)有了一些解決方案。在此我提出我的解決方案,是用 DELPHI 寫的程序(這些DELPHI程序都是沒有 FORM 和.PAS文件的),我覺得比較簡單,作為拋磚引玉。
1.1 顯示提示信息 SHOWMSG.DPR
program ShowMsg;
uses Windows;
{$R *.RES}
begin
if ParamCount < 2 then
begin
MessageBox(0, '用Windows對話框顯示信息'#13#10+
'用法: ShowMsg 提示信息 對話框標題',
'用法說明', MB_ICONINFORMATION);
Halt;
end;
MessageBox(0, PChar(ParamStr(1)), Pchar(ParamStr(2)), MB_OK);
Halt;
end.
1.2 顯示出錯信息 EmsgDlg.DPR
program EmsgDlg;
uses Windows;
{$R *.RES}
begin
if ParamCount < 2 then
begin
MessageBox(0, '用Windows對話框顯示出錯信息'#13#10+
'用法: EmsgDlg 出錯信息 對話框標題',
'用法說明', MB_ICONINFORMATION);
Halt;
end;
MessageBox(0, PChar(ParamStr(1)), PChar(ParamStr(2)), mb_IconHand);
Halt;
end.
2. INPUTBOX.DPR: 通過 WINDOWS 對話框接收用戶輸入的一個字符串,并把用戶輸入作為調(diào)用一個批處理程序或其他程序的第1個參數(shù)
program INPUTBOX;
uses Dialogs, Windows;
{$R *.RES}
var
NewString: string;
ClickedOK: Boolean;
begin
if ParamCount < 4 then
begin
MessageBox(0, '將用戶輸入作為.BAT或其他程序的參數(shù)調(diào)用'#13#10+
'用法: InputBox .BAT或其他程序文件名 缺省輸入 對話框標題 提示信息',
'InputBox用法說明', MB_ICONINFORMATION);
Halt;
end;
NewString := ParamStr(2); //default string
ClickedOK := InputQuery(ParamStr(3), ParamStr(4), NewString);
if ClickedOK then
WinExec(PChar(ParamStr(1) + ' ' + NewString), SW_SHOWNORMAL);
Halt;
end.
用法舉例:
PRT.BAT文件內(nèi)容:
@ECHO OFF
D:\POS\INPUTBOX.EXE PR30.BAT "99991231" "解壓POS報表文件并用寫字板打開入帳匯總表" "請輸入日期:"
PR30.BAT文件內(nèi)容:
@ECHO OFF
IF "%1"=="" GOTO END
D:
CD \POS\INBOX
IF NOT EXIST POS%1.ARJ GOTO NOT_FOUND
D:\POS\ARJ X -y POS%1.ARJ
CD D:\POS\INBOX\pos_report
IF NOT EXIST Pr30B%1.txt GOTO PR30_NOT_FOUND
C:\WINDOWS\WRITE Pr30B%1.txt
D:\POS\ShowMsg "成功!" "OK!!!"
GOTO END
:NOT_FOUND
D:\POS\EmsgDlg "文件D:\POS\INBOX\POS%1.ARJ找不到!" "出錯!"
CD D:\
GOTO END
:PR30_NOT_FOUND
D:\POS\EmsgDlg "文件D:\POS\INBOX\pos_report\Pr30B%1.txt找不到!" "出錯!"
CD D:\
GOTO END
:END
注:上述 DELPHI 程序編譯后,INPUTBOX.EXE大小是308KB,EMSGDLG.EXE 和 ShowMsg.exe大小都是 17KB,沒有比較用 VC 或 BCB 來寫的結(jié)果。但可以肯定,用 WIN32 匯編產(chǎn)生的 .EXE 最小,不過我沒有仔細學(xué)過 WIN32 匯編。歡迎有興趣的大俠比較一下或提出改進方法。