代码之家  ›  专栏  ›  技术社区  ›  pc1oad1etter

批处理脚本中的非模式通知框

  •  1
  • pc1oad1etter  · 技术社区  · 15 年前

    我想要一个名为“形成批处理文件”的非模式警报框。当前我正在使用vbscript创建模式警报框:

    >usermessage.vbs ECHO WScript.Echo^( "Generating report - this may take a moment." ^)
    WSCRIPT.EXE usermessage.vbs
    

    但是,我希望在不等待用户交互的情况下继续执行脚本(生成报告)。我怎样才能做到这一点?我不在乎它是不是vbscript——我只想让它在我的批处理脚本中工作(在WindowsXP中)。

    1 回复  |  直到 15 年前
        1
  •  2
  •   RBerteig Keith Adler    15 年前

    一个简单的答案是使用 start 命令从批处理文件执行中分离脚本。

    看起来像是:

    >usermessage.vbs ECHO WScript.Echo^( "Generating report - this may take a moment." ^)
    start WSCRIPT.EXE usermessage.vbs
    echo This text is a proxy for the hard work of writing the report
    

    唯一的区别是使用 开始 运行 wscript . 这确实存在这样的缺陷:它在当前目录中留下了一个临时文件,并且最终需要手动解除该框。

    这两个问题都很容易处理:

    @echo off
    setlocal 
    set msg="%TMP%\tempmsg.vbs"
    ECHO WScript.Echo^( "Generating report - this may take a moment." ^) >%msg% 
    start WSCRIPT.EXE /I /T:15 %msg%
    echo This text is a proxy for the hard work of writing the report
    ping -n 5 127.0.0.1 >NULL
    del %msg% >NUL 2>&1
    

    在这里,我将临时脚本移到 %TMP% 文件夹,完成后记得将其删除。我用过 echo 和A ping 命令浪费一些时间来演示长流程运行。我用了 /I /T 选项到 WScript 以确保脚本以“交互”方式运行,并设置允许脚本运行的最长时间。

    这个 @echo off setlocal 在命令提示符下运行时使其看起来更干净,并防止其在提示符的环境中留下名称“%msg%”。

    编辑: 约翰内斯·R·塞勒对 设置局部的 注释中的内容不正确。如果在命令提示下调用此函数,则不使用 设置局部的 变量msg将对提示以及从该提示启动的其他批处理文件和程序可见。这是一个好的习惯 设置局部的 在批处理文件中隔离局部变量,如果实际写入的内容超过了丢弃脚本。

    这可以很容易地证明:

    C:> type seta.bat 
    @set A=SomeValue
    
    C:> set A
    ALLUSERSPROFILE=C:\Documents and Settings\All Users
    APPDATA=C:\Documents and Settings\Ross\Application Data
    
    C:> seta.bat
    
    C:> set A
    A=SomeValue
    ALLUSERSPROFILE=C:\Documents and Settings\All Users
    APPDATA=C:\Documents and Settings\Ross\Application Data
    
    C:>