如何从网络共享运行批处理文件而没有“不支持UNC路径”消息?


87

我试图从网络共享运行批处理文件,但是我不断收到以下消息:“不支持UNC路径。默认为Windows目录。” 批处理文件位于\\Server\Soft\WPX5\install.bat。当以管理员身份登录时,从Windows 7桌面导航到\\Server\Soft\WP15\并双击install.bat,这就是我得到“不支持UNC路径”的信息。信息。我在网上找到了一些建议,指出映射驱动器将不起作用,但是使用符号链接可以解决此问题,但是符号链接对我而言不起作用。以下是我的批处理文件内容,请提供任何可以帮助我完成所要完成的工作的帮助。基本上,我希望能够从运行批处理文件\\Server\Soft\WP15\install.bat

批处理文件内容

mklink /d %userprofile%\Desktop\WP15 \\server\soft\WP15
\\server\soft\WP15\setup.exe
robocopy.exe "\\server\soft\WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s \\server\soft\WPX5\Custom\Migrate.reg

另外,安装完成后如何删除符号链接?


2
几年后,但可能对其他人有用:创建符号链接后,为什么还要继续引用原始路径?符号链接的目的是为您提供可替代的本地路径。例如,不要说“\\服务器\软\ WP15 \ setup.exe”文件,说:“%USERPROFILE%\桌面\ WP15 \ SETUP.EXE
ToolmakerSteve

说真的,这是一个ServerFault.com问题
Junjun Liu

Answers:


137

PUSHD和POPD应该可以为您提供帮助。

@echo off
:: Create a temporary drive letter mapped to your UNC root location
:: and effectively CD to that location
pushd \\server\soft

:: Do your work
WP15\setup.exe
robocopy.exe "WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s WPX5\Custom\Migrate.reg

:: Remove the temporary drive letter and return to your original location
popd

PUSHD /?从命令行键入以获取更多信息。


2
感谢您的快速回复和建议。我希望您的建议行得通,但不幸的是,它对我没有用。我收到相同的消息:“ ...不支持UNC路径。默认为Windows目录。” 我也获得了“用户帐户控制”对话框,单击“是”或“否”,即使我以管理员组成员的身份登录时也运行了该文件。
2012年

26
@Stew在.bat文件的开头,输入:pushd %~dp0应该可以将目录更改为包含bat文件的目录。它仍然会打印出警告,但是它应该照常工作。如果bat文件在其他地方使用'%〜dp0',则可能与此有关,在这种情况下,您可以检测%~dp0bat文件开头是否以'//'开头,如果是,则检测pushd,然后运行再次蝙蝠文件,然后goto :EOF。这将导致它在新映射的目录中运行。
Grant Peters 2013年

该cmd将在远程计算机还是本地计算机上执行?
Dingxin Xu

@DingxinXu-远程代码将在本地运行。如果要在远程计算机上运行代码,则需要类似PsExec的东西。
dbenham

3
@balki-是的,将远程命令放在另一个脚本中。之后PUSHD,通过执行第二个脚本CMD /C,然后使用POPDCMD /C脚本退出后,控制将返回到父脚本,即使该脚本已被CTRL-C终止。
dbenham 2014年

29

有一个注册表设置可以避免此安全检查(不过,使用此方法需要您自担风险):

在注册表路径下

   HKEY_CURRENT_USER
     \软件
       \ Microsoft
         \命令处理器

添加值DisableUNCCheck REG_DWORD并将值设置为0 x 1(十六进制)。

注意: 在Windows 10版本1803上,该设置似乎位于HKLM下:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor


1
不知道为什么,但是我在以下路径下找到了“命令处理器”文件夹:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
2008年

谢谢,这很有帮助。但是在Windows 10 1803上,它是HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor,如@aoh所指出的。
叶德温18'Dec

然后,我将更新答案;感谢您的精确度
Vinzz

26

我觉得这cls是最好的答案。在任何人看到它之前,它都会隐藏UNC消息。我将其与@pushd %~dp0右后角组合在一起,这样就好像打开脚本并一步一步映射位置一样,从而避免了其他UNC问题。

cls
@pushd %~dp0
:::::::::::::::::::
:: your script code here
:::::::::::::::::::
@popd

笔记:

pushd 将您的工作目录更改为新映射驱动器中的脚本位置。

popd 最后,清理映射的驱动器。


4
我需要popd在末尾(Windows 7),否则在关闭窗口后,映射的驱动器会卡住。
帕特里克

1
效果很好。谢谢。
Jonas_Hess

1
如果可以在Windows 10上运行。它仍然是“命令提示符”。
Grallen

11

基本上,您不能在未看到该消息的情况下从UNC路径运行它。

我通常所做的只是CLS在脚本的顶部放置一个,因此我不必看到该消息。然后,指定您需要使用的网络共享中文件的完整路径。


1
谢谢。如果没有其他解决方案,我将尝试将其作为最后的选择。
2012年

@jameslr答案会起作用,但是比我通常愿意做的更多(键入)工作。因此,只需要清除屏幕上的错误就可以了。:)
Aphoria 2012年

8

我需要仅Windows资源管理器浏览服务器共享,然后双击启动批处理文件。@dbenham为我的情况提供了一个更简单的解决方案(无popd后顾之忧):

:: Capture UNC or mapped-drive path script was launched from
set NetPath=%~dp0

:: Assumes that setup.exe is in the same UNC path
%NetPath%setup.exe

:: Note that NetPath has a trailing backslash ("\")
robocopy.exe "%NetPath%Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s %NetPath%..\WPX5\Custom\Migrate.reg

:: I am not sure if WPX5 was typo, so use ".." for parent directory
set NetPath=
pause

@ peter-mortensen,在脚本4x中编辑了注释以大写第一个单词?值得编辑吗?为什么不在句末加句号呢?怎么样:因为这只是一个注释,所以我故意不要在注释的第一个单词中使用大写字母,除了对修饰词和变量(或强调)的理解之外,这是更清晰的理解。
JayRO-GreyBeard

4

与其直接从资源管理器中启动批处理,不如创建批处理的快捷方式,然后在快捷方式的属性中将起始目录设置为本地路径,如%TEMP%之类。

要删除符号链接,请使用rmdir命令。


1
这将起作用,但仅当您要从快捷方式启动时才起作用。如果要从命令行运行或从另一个批处理文件调用,则无济于事。
Aphoria 2012年

2
如果要从另一个批处理或命令行中调用,则可以这样调用:start / d%TEMP%\\ Server \ Soft \ WP15 \ install.bat
jameslr 2012年

2

我最近在Windows 7的网络共享驱动器上使用批处理文件时遇到了相同的问题。

对我有用的另一种方法是通过Windows资源管理器将服务器映射到驱动器:工具->映射网络驱动器。给它一个驱动器号和\ yourserver的文件夹路径。由于我经常使用网络共享,因此映射到它会更加方便,并且它解决了“不支持UNC路径”错误。


2

我的情况略有不同。我在启动时正在运行一个批处理文件,以分发内部业务应用程序的最新版本。

在这种情况下,我使用Windows注册表运行密钥和以下字符串

cmd /c copy \\serverName\SharedFolder\startup7.bat %USERPROFILE% & %USERPROFILE%\startup7.bat

这将在启动时以正确的顺序运行两个命令。首先将批处理文件本地复制到用户有权访问的目录。然后执行相同的批处理文件。我可以创建一个本地目录c:\ InternalApps并从网络复制所有文件。

解决原始发布者的问题可能为时已晚,但可能会对其他人有所帮助。


1

这是我使用的RegKey:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001

0

我的envwindows10 2019 lts版本,我添加了这两个binray数据,修复了此错误

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command ProcessorDisableUNCCheck值1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor DisableUNCCheck值1


0

这是一个非常旧的线程,但是我仍然使用Windows7。:-)

有一点似乎没有人考虑过,这可能也会对Windows 10用户有所帮助。

如果启用了命令扩展名,则PUSHD命令除了接受正常的驱动器号和路径外,还将接受网络路径。

因此,最明显且最简单的答案是,如果您打算使用PUSHD,则在批处理脚本中启用命令扩展。至少,这应该可以减少使用PUSHD和网络路径时可能遇到的问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.