【问题标题】:CMD does not support UNC paths as current directoriesCMD 不支持将 UNC 路径作为当前目录
【发布时间】:2021-06-14 04:17:25
【问题描述】:

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

【问题讨论】:

    标签: cmd path unc


    【解决方案1】:

    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 通过在命令提示符窗口中运行来接受当前目录的 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目录在计划任务的属性中。

    在您的情况下,批处理文件设计为作为计划任务执行,因此考虑到我在回答问题What must be taken into account on executing a batch file as scheduled task? 时列出的所有方面,您可以在使用 UNC 双击批处理文件时忽略此警告消息路径。

    当然,您也可以为批处理文件创建一个快捷方式文件(*.lnk),以便通过此快捷方式启动批处理文件,并将快捷方式文件属性中的Start in设置为%SystemRoot%\System32就像 Windows 任务调度程序默认做的那样。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 使用powershell登录的问题是.ps1总是用记事本打开,但有变通办法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2017-09-14
      • 1970-01-01
      • 2014-08-19
      • 2023-03-27
      • 2016-12-25
      • 2023-03-27
      相关资源
      最近更新 更多