CMD 不支持 UNC 路径作为当前目录

CMD does not support UNC paths as current directories

我们的批处理脚本似乎 运行 不错,但是我正在编辑其中一个以包含一些新工作,并且在手动 运行 脚本时(通过双击 windows explorer) 每次遇到脚本中的 pushd 命令时,我都会收到上述错误消息。这些是自 year dot 以来一直存在的 pushd 命令,脚本 运行ning 很好。 批处理脚本 运行ning 手动启动和由调度程序启动时有区别吗? 如何在手动 运行ning 时禁用错误消息(如果可能)?

Windows 文件资源管理器 explorer.exe 启动 cmd.exe 隐式使用选项 /C 以在完成批处理文件执行和设置批处理文件后关闭命令进程目录作为双击批处理文件时的当前目录。

如果双击的批处理文件在网络共享上并且使用 UNC 路径而不是将网络共享映射到驱动器号并使用网络驱动器,cmd.exe 通知用户 UNC 路径由于不支持当前目录,因此将 %SystemRoot%(Windows 目录)设置为当前目录。

如果批处理文件被设计为从任何目录执行,这意味着它不要求批处理文件的目录是当前目录,则可以忽略该警告。良好的编码批处理文件,尤其是那些由 Windows 任务调度程序执行的文件,可以在任何目录作为当前目录的情况下执行。

另请参阅:How can I disable the Universal Naming Convention (UNC) check for command sessions?

可以使用注册表值配置 Windows 命令处理器 cmd.exe 通过 运行 在命令提示符 window 中接受当前目录的 UNC 路径]:

%SystemRoot%\System32\reg.exe ADD "HKEY_CURRENT_USER\Software\Microsoft\Command Processor" /v DisableUNCCheck /t REG_DWORD /d 1 /f

请注意,当您启用对 运行 以 UNC 路径作为当前目录的批处理文件的支持时,一些控制台应用程序可能会失败 运行 因为不是为该环境设计的。

任务计划程序将 %SystemRoot%\System32(Windows 系统目录)设置为当前目录,然后将 运行 批处理文件作为计划任务执行命令,但明确指定了特定目录路径在计划任务的属性中设置为 start in 目录。

在您的情况下,批处理文件设计为作为计划任务执行,因此考虑了我在回答问题 时列出的所有方面,您可以在双击时忽略此警告消息使用 UNC 路径的批处理文件。

当然你也可以为批处理文件创建一个快捷方式文件(*.lnk),通过这个快捷方式启动批处理文件,快捷方式文件的属性中开始于是设置为 %SystemRoot%\System32 作为 Windows 任务计划程序默认设置。

我有一些建议 - 考虑在 PowerShell 中重写您的脚本。 PowerShell 允许当前工作目录位于网络上。 PowerShell 作为一个整体比 CMD 更通用、更强大。它也是跨平台的。考虑转换。