对当前技巧没有新要求的简单答案是使用start
命令将脚本与批处理文件执行分离。
这可能看起来像:
>usermessage.vbs ECHO WScript.Echo^("生成报告 - 这可能需要一点时间。" ^)
启动 WSCRIPT.EXE usermessage.vbs
echo 这段文字代表了写报告的辛勤工作
唯一的区别是start
用于运行wscript
。这确实存在缺陷,即它会在当前目录中留下一个临时文件,并且最终需要手动关闭该框。
这两个问题都很容易处理:
@echo 关闭
设置本地
设置 msg="%TMP%\tempmsg.vbs"
ECHO WScript.Echo^("正在生成报告 - 这可能需要一点时间。" ^) >%msg%
启动 WSCRIPT.EXE /I /T:15 %msg%
echo 这段文字代表了写报告的辛勤工作
ping -n 5 127.0.0.1 >NULL
删除 %msg% >NUL 2>&1
在这里,我将临时脚本移到%TMP%
文件夹中,并记住在完成后将其删除。我使用了一个echo
和一个ping
命令来浪费一些时间来演示一个长时间的进程运行。而且,我使用/I
和/T
选项来wscript
确保脚本以“交互方式”运行并设置允许脚本运行的最长时间。
@echo off
并setlocal
使其在命令提示符下运行时看起来更干净,并防止它在提示符环境中留下名称 `%msg% 。
编辑: Johannes Rösselsetlocal
在评论中的批评是不正确的。如果在命令提示符下调用它,则没有setlocal
变量 msg 将对提示符以及从该提示符启动的其他批处理文件和程序可见。setlocal
如果一个人实际上编写的不仅仅是一次性脚本,那么使用隔离批处理文件中的局部变量是一种很好的做法。
这很容易证明:
C:> 输入 seta.bat
@set A=SomeValue
C:>设置A
ALLUSERSPROFILE=C:\Documents and Settings\所有用户
APPDATA=C:\Documents and Settings\Ross\Application Data
C:> seta.bat
C:>设置A
A=某个值
ALLUSERSPROFILE=C:\Documents and Settings\所有用户
APPDATA=C:\Documents and Settings\Ross\Application Data
C:>