我们知道 DOS 下的批处理程序中可以用 ECHO 显示一段信息(提示信息或出错信息)对于要接收用户输入的情况MSDOS 本身提供的外部程序就只有 CHOICE 能让用户输入一个键所以基本上只能用于菜单选择对于下述两个需求那就只有另外编程序了
.在 DOS 下的批处理程序中通过 WINDOWS 对话框显示一段提示信息或出错信息
.在 DOS 下的批处理程序中通过 WINDOWS 对话框接收用户输入的一个字符串并对其进行后续处理
对于这两个问题相信有些人已经有了一些解决方案在此我提出我的解决方案是用 DELPHI 写的程序(这些DELPHI程序都是没有 FORM 和PAS文件的)我觉得比较简单作为抛砖引玉
显示提示信息 SHOWMSGDPR
program ShowMsg;
uses Windows;
{$R *RES}
begin
if ParamCount < then
begin
MessageBox( 用Windows对话框显示信息##+
用法: ShowMsg 提示信息 对话框标题
用法说明 MB_ICONINFORMATION);
Halt;
end;
MessageBox( PChar(ParamStr()) Pchar(ParamStr()) MB_OK);
Halt;
end
显示出错信息 EmsgDlgDPR
program EmsgDlg;
uses Windows;
{$R *RES}
begin
if ParamCount < then
begin
MessageBox( 用Windows对话框显示出错信息##+
用法: EmsgDlg 出错信息 对话框标题
用法说明 MB_ICONINFORMATION);
Halt;
end;
MessageBox( PChar(ParamStr()) PChar(ParamStr()) mb_IconHand);
Halt;
end
INPUTBOXDPR
通过 WINDOWS 对话框接收用户输入的一个字符串并把用户输入作为调用一个批处理程序或其他程序的第个参数
program INPUTBOX;
uses Dialogs Windows;
{$R *RES}
var
NewString: string;
ClickedOK: Boolean;
begin
if ParamCount < then
begin
MessageBox( 将用户输入作为BAT或其他程序的参数调用##+
用法: InputBox BAT或其他程序文件名 缺省输入 对话框标题 提示信息
InputBox用法说明 MB_ICONINFORMATION);
Halt;
end;
NewString := ParamStr(); //default string
ClickedOK := InputQuery(ParamStr() ParamStr() NewString);
if ClickedOK then
WinExec(PChar(ParamStr() + + NewString) SW_SHOWNORMAL);
Halt;
end
用法举例
PRTBAT文件内容:
@ECHO OFF
D:\POS\INPUTBOXEXE PRBAT 解压POS报表文件并用写字板打开入帐汇总表 请输入日期:
PRBAT文件内容:
@ECHO OFF
IF %== GOTO END
D:
CD \POS\INBOX
IF NOT EXIST POS%ARJ GOTO NOT_FOUND
D:\POS\ARJ X y POS%ARJ
CD D:\POS\INBOX\pos_report
IF NOT EXIST PrB%txt GOTO PR_NOT_FOUND
C:\WINDOWS\WRITE PrB%txt
D:\POS\ShowMsg 成功! OK!!!
GOTO END
:NOT_FOUND
D:\POS\EmsgDlg 文件D:\POS\INBOX\POS%ARJ找不到! 出错!
CD D:\
GOTO END
:PR_NOT_FOUND
D:\POS\EmsgDlg 文件D:\POS\INBOX\pos_report\PrB%txt找不到! 出错!
CD D:\
GOTO END
:END
注上述 DELPHI 程序编译后INPUTBOXEXE大小是KBEMSGDLGEXE 和 ShowMsgexe大小都是 KB没有比较用 VC 或 BCB 来写的结果但可以肯定用 WIN 汇编产生的 EXE 最小不过我没有仔细学过 WIN 汇编欢迎有兴趣的大侠比较一下或提出改进方法