批处理 - CMD.exe /T 参数选项不能按预期设置颜色

5
在我的操作系统中没有msg.exe,因此我正在尝试使用cmd.exe模拟弹出式消息框。但我遇到了令人头疼的问题。
我的最终目标是使用.vbs脚本和schtasks.exe在任务计划程序中创建一个弹出式提醒。
我的问题是,如果我在批处理文件中运行以下内容:
start "Alert" cmd.exe /t:f0 /k "mode con: cols=40 lines=10 & echo *** Message goes here *** & echo. & echo. & echo. & echo. & echo. & echo. & echo. & echo Press any key to exit & pause>nul"

我得到了期望的结果,但是如果我将/k参数更改为/c(如原始脚本中所打算的),选择的前景/背景颜色将无法正确显示...

我通过更改脚本来解决这个问题:

start "Alert" cmd.exe /c "mode con: cols=40 lines=10 & color f0 & echo *** Message goes here *** & echo. & echo. & echo. & echo. & echo. & echo. & echo. & echo Press any key to exit & pause > nul"

但是我不明白为什么在我的原始脚本中/t失败了。有人能解释一下吗?

作为一个相关的问题 - 不确定是否允许,在这种情况下请忽略 - 任务计划程序允许手动创建“显示消息”操作,这是在应用程序内实现的吗?并且是否可以通过schtasks.exe以编程方式设置它?

1个回答

4
关于 cmd.exe 在指定 /k 时忽略 /t 的问题 - 确实看起来像是cmd.exe的错误,我可以在Windows 10发布的1607版本上确认。不要抱太大希望等待修复...
关于 schtasks.exe - 有一些计划任务功能无法通过命令行参数直接创建。作为解决方法,您可以手动创建这样一个任务,将其导出,可能编辑导出的xml,然后使用 schtasks /Create /XML mytask.xml 重新创建它。请注意,“显示消息”被标记为(已弃用),因此在将来的版本中可能无法正常工作。

谢谢您的回复。顺便说一下,我正在运行Windows 7 Home Premium。如果这确实是一个错误,那么我一定会考虑您提供的解决方法 - 这是否意味着“显示消息”操作是TS内在的进程,还是调用另一个应用程序来执行弹出消息?您认为现在向微软报告此错误为时过早,甚至值得吗? - Albert F D
好的,我已经确定了我想要通过编程实现的任务,手动创建时当消息窗口被触发时,在任务管理器中没有出现新的进程,弹出窗口似乎是TS(taskeng.exe)本身固有的 :( ...我还确定了在“程序/脚本”字段和“添加参数”字段中不接受“start”命令行之前的“cmd.exe”,这样做的目的是更改cmd窗口标题,至少我可以在运行命令选项本身中使用“title”参数来完成这个任务... - Albert F D
确认一下,当指定了/c时,cmd.exe会忽略/t。通过运行cmd /t:3F dir(改变颜色)和cmd /t:3F /c dir(没有颜色变化)来测试一下。 - Jonathan Lidbeck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接