这真是奇怪。我有一个使用Windows 7的调度程序运行的.bat文件,在对其进行更新后,我注意到它仍然像是在运行旧版本的.bat程序一样。
很容易分辨出是哪一个运行的-它们输出到.txt文件,新版本转储了更多信息。因此,这是在三种情况下发生的情况:
打开一个cmd窗口(右键单击并以“以管理员身份运行”)。CD进入目录并以常规方式执行setvispw.bat,方法是键入“ setvispw.bat”并按Enter。
结果:当前版本按预期运行。
右键单击setvispw.bat,然后单击“打开”
结果:当前版本按预期运行。但这不好,因为我正在更改另一个用户的密码,并且需要管理员权限。
右键单击setvispw.bat,然后单击“以管理员身份运行”。结果:发生其他事情!好像它是从几天前我对.bat进行更改之前开始运行的版本。
所以我尝试了一些更奇怪的事情。我用虚拟程序替换了我的功能程序...并且它正在运行虚拟程序。
最后,我添加了一些“暂停”语句...就是在我得到答案的时候。我不会使用“排除故障”的功能,而是使用“回答您自己的问题”功能。
事实证明,问题在于我依靠setvispw.bat的输出来告诉我该程序运行了哪个版本。好吧,新旧版本都有此行:
echo Random string is !_RndAlphaNum! > C:\pathname\curVisitorPW.txt
但是我添加的行是这样的:
echo Sending email: >> curVisitorPW.txt
当我从C:\ pathname运行时,无论是在CMD窗口中还是没有管理员权限,它都可以正常工作。但是,当我使用Admin privs运行时,就像在Scheduler中一样,工作目录不是C:\ pathname-它是C:\ Windows \ System32。直到我添加了“暂停”,我才发现自己并没有跑到比赛地点!当然,在System32中有一个curVisitorPW.txt。
当然,解决方案很简单-使用完全限定的路径名。
希望如果像我这样的人在.bat文件中看到奇怪的行为,这会派上用场,并开始怀疑是否存在某种类型的缓存,管理员权限/特权或其他疯狂的东西。我自己准备将其固定在gremlins上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句