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

7

我们有一些批处理脚本,看起来运行良好,但我正在编辑其中一个以包含一些新的工作内容。当手动运行脚本(通过从Windows资源管理器双击运行)时,每次遇到脚本中的pushd命令都会出现上述错误消息。这些pushd命令自从开始运行脚本以来就一直存在,并且脚本一直在正常运行。 手动运行脚本和由调度程序启动时之间是否存在差异? 如果可能的话,如何在手动运行时禁用错误消息?

2个回答

5
Windows文件浏览器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

请注意,当您启用支持以UNC路径作为当前目录运行批处理文件时,一些控制台应用程序可能因未设计为该环境而无法运行。
任务计划程序在执行按计划运行的批处理文件的命令之前将%SystemRoot%\System32(Windows系统目录)设置为当前目录,除非在计划任务的属性中明确设置了特定目录路径作为起始目录。
对于您的情况,批处理文件被设计为按计划任务执行,并考虑了我在执行批处理文件作为计划任务时必须考虑的所有方面中列出的所有方面,您可以忽略使用UNC路径双击批处理文件时出现的此警告消息。
当然,您还可以为批处理文件创建快捷方式(*.lnk),通过此快捷方式启动批处理文件,其中“开始处”在快捷方式文件的属性中设置为%SystemRoot%\System32,就像Windows任务计划程序默认情况下所做的那样。

3

我有一个建议——考虑用PowerShell重写你的脚本。PowerShell允许当前工作目录在网络上。整个PowerShell比CMD更灵活、更强大。它也是跨平台的。考虑切换。


使用PowerShell登录的问题在于.ps1文件总是用记事本打开,但有解决方法。 - Justin Goldberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接