2014-10-06 165 views
0

这只是奇怪的。我有一个使用Windows 7的调度程序运行的.bat文件,我注意到在对它进行更新后,它仍然像运行旧版本的.bat程序一样运行。以管理员身份运行.bat文件,获取旧版本?

很容易判断哪一个运行 - 它们输出到.txt文件,而新版本会转储更多信息。因此,在以下三种情况下会发生什么:

打开cmd窗口(右键单击并以“以管理员身份运行”)。 CD到目录并以通常的方式执行setvispw.bat,方法是输入“setvispw.bat”并按Enter。

结果:当前版本按预期运行。

右键单击setvispw.bat和“打开”

结果:当前版本运行正常。但这并不好,因为我正在更换另一个用户的密码并需要管理员权限。

右键单击setvispw.bat和“以管理员身份运行”。 结果:别的东西在运行!看起来它运行的是我前几天修改.bat之前的版本。

所以我尝试了一些更奇怪的东西。我用一个虚拟程序替换了我的功能程序......并且正在运行虚拟程序。

最后,我添加了一些“暂停”语句...那是当我得到答案。我将使用“回答你自己的问题”功能,而不是放弃这些故障排除。

回答

0

事实证明,问题是我依赖于setvispw.bat的输出来告诉我程序运行的是什么版本。那么,这两个新版本和旧版本有这样一行:

echo Random string is !_RndAlphaNum! > C:\pathname\curVisitorPW.txt 

但是我添加的行是这样的:

​​

当我在C跑:\路径,无论是在CMD窗口或不管理员权限,它工作得很好。但是当我使用Admin privs运行时,就像它从Scheduler执行的那样,工作目录不是C:\ pathname - 它是C:\ Windows \ System32。直到我添加了“停顿”,并且看到我没有跑到我想要的位置,我才看到这些。果然,在System32中有一个curVisitorPW.txt。

该解决方案当然很简单 - 使用完全限定的路径名​​。

希望这会派上用场,如果像我这样的人在.bat文件中看到奇怪的行为,并开始怀疑是否有某种缓存或管理员权限/特权或其他疯狂的东西。我准备把它钉在gremlins上,我自己。

相关问题