如何在没有"UNC路径不支持"消息的情况下从网络共享运行批处理文件?

Ste*_*tew 75 windows unc batch-file

我试图从网络共享运行批处理文件,但我不断收到以下消息:"不支持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
Run Code Online (Sandbox Code Playgroud)

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

dbe*_*ham 128

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
Run Code Online (Sandbox Code Playgroud)

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

  • @Stew在.bat文件的开头,输入:`pushd%~dp0`应该让它将目录更改为包含bat文件的目录.它仍会打印出警告,但它应该按照惯例工作.如果bat文件在其他地方使用'%~dp0',它可能会有问题,在这种情况下,您可以检测在bat文件的开头是否以'//'开头`%~dp0`,如果是, `pushd`,然后再次运行bat文件,然后`goto:EOF`.这将导致它在新映射的目录中运行. (24认同)
  • @balki - 是的,将远程命令放在另一个脚本中.在"PUSHD"之后,通过`CMD/C`执行第二个脚本,然后用`POPD`执行.在`CMD/C`脚本退出后,Control将返回到父脚本,即使它被CTRL-C终止. (3认同)
  • 感谢您的快速回复和建议。我希望你的建议能奏效,但不幸的是它对我不起作用。我收到相同的消息:“...不支持 UNC 路径。默认为 Windows 目录。” 我还让“用户帐户控制”对话框单击“是”或“否”,即使我在以管理员组成员身份登录时运行该文件也是如此。 (2认同)

Vin*_*nzz 24

有一个注册表设置,以避免此安全检查(尽管使用它自己的风险):

在注册表路径下

   HKEY_CURRENT_USER
    \Software
      \Microsoft
        \Command Processor

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

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

  • 不知道为什么,但我在以下路径下找到了“命令处理器”文件夹:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor (2认同)

Gra*_*len 21

我觉得这cls是最好的答案.它在任何人都可以看到它之前隐藏了UNC消息.我将其与之后的@pushd %~dp0权利相结合,以便打开脚本并在一步中映射该位置,从而防止进一步的UNC问题.

cls
@pushd %~dp0
:::::::::::::::::::
:: your script code here
:::::::::::::::::::
@popd
Run Code Online (Sandbox Code Playgroud)

笔记:

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

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

  • 我最后需要`popd`(Windows 7),否则在窗口关闭后映射的驱动器会被困住. (3认同)
  • 效果很好。谢谢。 (3认同)
  • 如果应该在 Windows 10 上工作。它仍然是“命令提示符”。 (2认同)
  • 对我来说就像一个魅力。 (2认同)

aph*_*ria 11

基本上,如果没有看到该消息,则无法从UNC路径运行它.

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


Jay*_*ard 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
Run Code Online (Sandbox Code Playgroud)