我们有似乎运行良好的批处理脚本,但是我正在编辑其中一个脚本以包含一些新工作,并且在手动运行脚本时(通过在 Windows 资源管理器中双击),每次在脚本中执行 pushd 命令时,我都会收到上述错误消息遇到了。这些是自年点以来一直存在的 pushd 命令,并且脚本运行良好。手动运行的批处理脚本和由调度程序启动的批处理脚本之间有区别吗?手动运行时如何禁用错误消息(如果可能)?
Windows 文件资源管理器explorer.exe在完成批处理文件执行后cmd.exe隐式使用关闭命令进程的选项/C,并在双击批处理文件时将批处理文件目录设置为当前目录。
如果双击的批处理文件位于网络共享上并且使用 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
Run Code Online (Sandbox Code Playgroud)
请注意,当您启用对以 UNC 路径作为当前目录运行批处理文件的支持时,某些控制台应用程序可能会因未针对该环境而设计而无法运行。
任务计划程序%SystemRoot%\System32在执行将批处理文件作为计划任务运行的命令之前,将(Windows 系统目录)设置为当前目录,除非在计划任务的属性中明确将特定目录路径设置为起始目录。
在您的情况下,批处理文件设计为作为计划任务执行,因此考虑了我在回答问题“作为计划任务执行批处理文件时必须考虑什么?”中列出的所有方面?,您可以在双击使用 UNC 路径的批处理文件时忽略此警告消息。
当然,您也可以为批处理文件创建一个快捷方式文件(*.lnk),以便通过该快捷方式启动批处理文件,并将快捷方式文件的属性中的“启动”设置%SystemRoot%\System32为Windows任务计划程序的默认设置。