明辉站/技术开发/内容

通过DELPHI小程序在WINDOWS下更好地使用DOS批处理

技术开发2023-08-11 阅读
[摘要]我们知道 DOS 下的批处理程序中,可以用 ECHO 显示一段信息(提示信息或出错信息),对于要接收用户输入的情况,MS-DOS 本身提供的外部程序就只有 CHOICE 能让用户输入一个键,所以基本上只能用于菜单选择。对于下述两个需求,那就只有另外编程序了: 1、在 DOS 下的批处理程序中通过 ...
我们知道 DOS 下的批处理程序中,可以用 ECHO 显示一段信息(提示信息或出错信息),对于要接收用户输入的情况,MS-DOS 本身提供的外部程序就只有 CHOICE 能让用户输入一个键,所以基本上只能用于菜单选择。对于下述两个需求,那就只有另外编程序了:
1、在 DOS 下的批处理程序中通过 WINDOWS 对话框显示一段提示信息或出错信息
2、在 DOS 下的批处理程序中通过 WINDOWS 对话框接收用户输入的一个字符串,并对其进行后续处理

对于这两个问题,相信有些人已经有了一些解决方案。在此我提出我的解决方案,是用 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 对话框接收用户输入的一个字符串,并把用户输入作为调用一个批处理程序或其他程序的第1个参数
program INPUTBOX;
uses Dialogs, Windows;
{$R *.RES}
var
NewString: string;
ClickedOK: Boolean;
begin
if ParamCount < 4 then
begin
MessageBox(0, '将用户输入作为.BAT或其他程序的参数调用'#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文件内容:
@ECHO OFF
D:\POS\INPUTBOX.EXE PR30.BAT "99991231" "解压POS报表文件并用写字板打开入帐汇总表" "请输入日期:"

PR30.BAT文件内容:
@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 来写的结果。但可以肯定,用 WIN32 汇编产生的 .EXE 最小,不过我没有仔细学过 WIN32 汇编。欢迎有兴趣的大侠比较一下或提出改进方法。

……

相关阅读