我们有一些批处理脚本,看起来运行良好,但我正在编辑其中一个以包含一些新的工作内容。当手动运行脚本(通过从Windows资源管理器双击运行)时,每次遇到脚本中的pushd命令都会出现上述错误消息。这些pushd命令自从开始运行脚本以来就一直存在,并且脚本一直在正常运行。 手动运行脚本和由调度程序启动时之间是否存在差异? 如果可能的话,如何在手动运行时禁用错误消息?
explorer.exe
会在双击批处理文件时,使用隐式选项/C
来关闭命令进程,并将批处理文件目录设置为当前目录,以启动cmd.exe
。如果双击的批处理文件位于网络共享上,并且使用UNC路径而不是映射网络共享到驱动器并使用网络驱动器,则cmd.exe
会提示用户不支持UNC路径作为当前目录,并将%SystemRoot%
(Windows目录)设置为当前目录。如果批处理文件被设计成可以从任何目录执行,也就是说,它不需要批处理文件所在的目录是当前目录,则可以忽略此警告。好的编码批处理文件,尤其是那些由Windows任务计划程序执行的批处理文件,可以在任何目录下执行。另请参见:如何禁用命令会话的通用命名约定(UNC)检查? 可以通过运行以下命令在注册表中配置Windows命令处理器cmd.exe
接受UNC路径作为当前目录的值:%SystemRoot%\System32\reg.exe ADD "HKEY_CURRENT_USER\Software\Microsoft\Command Processor" /v DisableUNCCheck /t REG_DWORD /d 1 /f
我有一个建议——考虑用PowerShell重写你的脚本。PowerShell允许当前工作目录在网络上。整个PowerShell比CMD更灵活、更强大。它也是跨平台的。考虑切换。