我想在Windows中从睡眠状态恢复后运行batch file。
如果我在命令行上启动batch file,一切都按预期工作。
但批处理脚本不能按计划任务正常运行。
我做了什么:
批处理 – 在rmdir命令中获取“目录不为空”
简单的安装方法需要Windows / Batch Reference吗?
如何检查服务是否正在通过batch file运行,并启动它,如果它没有运行?
批量编码开始命令错误
从C#运行bat脚本
外部configuration文件AutoMountConf.bat包含set Pass = Test
本地脚本文件scheduleTask.bat包含
rem AutoMountConf.bat is in my intranet. call X:AutoMountConf.bat start "" "C:Program FilesTrueCryptTrueCrypt.exe" /auto favorites /p %Pass% /q
在命令行上挂载TrueCrypt容器。 如果我从计划任务运行脚本,我会得到login屏幕手动input密码。
获取Windows中一个巨大文件的最后n行或者字节(比如Unix的尾部)。 避免耗时的select
在控制台上打印通过subprocess.check_output调用的可执行文件,但不返回结果
如何从命令提示符发送EOF *没有换行*?
在Windows 2002中,“超时”不被识别为内部或外部命令,可运行程序或batch file
计数器不会在Windowsbatch file中用FOR循环中的IF语句递增
有两个甚至三个问题。
第一个是set Pass = Test而不是set "Pass=Test"因为斯蒂芬已经报道。 有关如何为环境变量赋值的详细信息,请参阅我的答案为什么在命令行上使用“set var = text”后,没有使用“echo%var%”输出字符串?
第二个问题是由用户将驱动器映射到驱动器号并由Windows注册的网络驱动器在用户注销时由Windows自动断开连接,并且只有在同一用户再次登录时才会重新连接。
对于计划任务,因此经常需要在网络中的共享文件夹上使用UNC路径作为文件和文件夹,或者连接网络驱动器,并在作为计划任务执行的批处理文件中断开连接。
无法使用UNC路径调用批处理文件。 Windows不允许这样做。 因此,需要在批处理文件中手动连接和断开网络共享。 我为这个问题提供了2个解决方案。
第一个是使用命令网络使用 :
%systemRoot%system32net.exe use X: \ComputerNameShareName password /user:DomainUserName /persistent:no if not errorlevel 1 ( call X:AutoMountConf.bat %systemRoot%system32net.exe use X: /delete start "" /wait "C:Program FilesTrueCryptTrueCrypt.exe" /auto favorites /p %Pass% /q )
password和/user:DomainUserName是必要的,只有计划的任务不是使用有权访问远程计算机上的批处理文件的用户帐户执行的。 一般来说,使用正确的用户帐户来定义计划任务是安全得多的,并且还为该帐户连同任务一起保护密码。 Windows存储加密的任务密码,就像用户帐户本身一样。
在命令提示符下运行windows net use /? 了解所需和可选选项的详细信息。 /persistent:no是避免记住Windows注册表中的网络共享,以便在同一用户登录后自动重新连接。
第二个是使用命令pushd和popd :
pushd \ComputerNameShareName if not errorlevel 1 ( call AutoMountConf.bat popd start "" /wait "C:Program FilesTrueCryptTrueCrypt.exe" /auto favorites /p %Pass% /q )
请在命令提示符窗口执行pushd /? 并阅读输出帮助,以了解为什么这个工作。
但是这个解决方案要求使用正确密码的计划任务的用户帐户是对远程计算机上的共享具有适当权限的帐户。 批处理文件本身不能使用此解决方案指定密码和用户名。
if not errorlevel 1意味着前一个命令退出NOT的值大于或等于1,意味着如果前一个命令的退出代码是0,则命令执行成功。 总是会出现这样的情况:远程机器当前在网络上不可用,因此在连接远程机器上共享时检查成功是很好的。
运行AutoMountConf.bat之后,可能还有另外一个原因为什么Pass没有被定义。
AutoMountConf.bat包含setlocal ,变量Pass是在执行该命令之后, endlocal在相同的批处理文件中执行之前定义的,或者是在退出AutoMountConf.bat由命令处理器隐式调用的。
setlocal的结果是始终创建一个现有环境变量的副本 ,并且在本地副本上完成对环境变量的所有修改。 以前的环境变量在执行(匹配) endlocal时或在达到批处理文件结束时恢复,在这种情况下,命令处理器会自动恢复以前的环境。
请在命令提示符窗口中执行setlocal /? 并阅读输出帮助。
例如,通过命令setlocal和endlocal来理解环境管理,或许更好地看到在回声批量中的URL的答案, 为什么我的CD%myVar%被忽略?
set Pass = Test
用Content <space>Test设置一个变量pass<space> 。 所以%pass%保持空白。
使用这个语法:
set "Pass=Test"
避免任何意外的空间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。