以下是我正在处理的批处理脚本的片段,该脚本在启动时运行(或初始登录,视具体情况而定)。部分脚本依赖于存储在加密闪存驱动器上的文件。
我希望脚本等到用户输入加密密码并关闭对话窗口后再继续。
我目前的尝试涉及寻找一个标题为“#34;输入外部中间密码" (见截图)并继续循环,直到该窗口不再存在。
问题是TASKLIST似乎无法通过标题找到这个窗口,而我还没有找到原因。
如果我将/FI
参数更改为类似"WINDOWTITLE eq Untitled - Notepad"
的内容并再次运行脚本,只要我打开一个新的记事本文档,循环很乐意继续(所以我知道至少那部分工作如预期的那样。
:DDP
TASKLIST /FI "WINDOWTITLE eq Enter External Media Password" | FINDSTR /C:"No tasks" > NUL
IF %ERRORLEVEL% NEQ 0 ( GOTO :DDP )
FWIW,在我挖掘解决方案时,我通过TASKLIST /V /FI "IMAGENAME eq EmsServiceHelper.exe"
检查了父进程的密码提示,以查看打开的窗口,其中显示的窗口标题为EMS Message Dialog
。 然而即使在我的过滤器中使用此窗口标题仍然无法正常工作。此外,无论密码提示是否打开,TASKLIST都会返回此窗口标题...因此可能不是它。
任何输入都有帮助!提前谢谢!
答案 0 :(得分:0)
好的,我可以通过以下方式找到我的问题的解决方法:
:DDP
TYPE header.txt 2>NUL >NUL
IF ERRORLEVEL 1 ( GOTO :DDP )
现在发生的是脚本将尝试TYPE
位于加密卷上的header.txt
内容。只要卷仍然是加密的,该命令将以Access is denied
(和错误级别1)失败,并继续循环。
一旦用户输入正确的密码,文件就会被解密并且命令会成功执行,从而打破循环并允许脚本继续运行。
对于确切的问题,这不是真正的“解决方案”,但它肯定是一种可用的解决方法,并且可以按照需要运行。
为了完整起见,2> NUL阻止Access is denied
在循环中重复打印到控制台,并且> NUL阻止在文件访问后打印header.txt
的内容理所当然的。