如果通过计划任务调用BAT文件,则无法将文件复制到UNC目标

13

我有一个批处理文件,用于将当前计算机上的文件复制到映射的网络驱动器(使用一行xcopy命令)。

当我通过远程桌面连接到服务器时,它可以正常工作。然而,当我将其配置为以与我登录的相同用户身份运行的计划任务时,它却无法工作,并显示错误代码0x4。

有没有什么办法解决这个问题?

我还尝试了dsynchronize,当我点击“同步”时,它可以正常工作。但是以服务方式运行时出现相同的问题。


我已经为帮助我的那个答案点了赞,但是这个答案也帮助我在我的情况下进行了调试。https://dev59.com/pWoy5IYBdhLWcg3wQ78F - lessthanideal
5个回答

22

我已经搞定了。以下批处理文件可以在计划程序下运行,即使是本地系统帐户:

net use m: \\server\share /U:server\user password
xcopy C:\source m: /E /Y

每次它映射一个网络驱动器,然后复制到那个驱动器。


10

可以在不将路径映射为网络驱动器的情况下复制文件到 UNC 路径。只需将 UNC 路径设置在引号中即可。

copy * "\\server\share"

在 Windows7 命令行中运行时,没有引号会出现“语法错误”的情况。


5

我曾经遇到一个类似的问题,需要将文件从一台服务器复制到数百台其他服务器,但不想将远程驱动器映射到我的本地计算机。由于我没有足够的驱动器字母将数百个远程机器映射到我的本地PC上,因此我无法直接映射远程驱动器并进行复制。

我认为我可以使用 copy、xcopy 或 robocopy,并指定我的凭据给复制命令。但是,这些复制命令都没有提供向远程系统提供凭据的选项。

感谢上面的帖子,我能够创建一个小批处理文件,在其中循环我的主机,并始终重复使用一个驱动器映射来处理所有主机。

以下是我的批处理文件...

echo @off
for /F %%j in (pchostslist1.txt) do (
  net use z:\\%%j\c$ /user:domain\myusername mypassword
  mkdir \\%%j\c$\tmp\mynewdir
  xcopy c:\anyfile.txt \\%%j\c$\tmp\mynewdir
  net use z: /delete
)

4
我遇到了类似的问题,但与其使用 "net use" 命令,我只需要将密码存储为计划任务的一部分。如果勾选了“仅访问本地资源”,则可以看到它仅具有访问本地资源的权限。

1
谁映射了网络驱动器?你是否使用了映射的名称,而不是底层的UNC本地路径?因为听起来像是映射的驱动器是在你的登录脚本中设置的,如果你没有登录,这个脚本就不会运行。所以,在计划任务中,你确实拥有UNC路径的正确凭证,但却没有映射的驱动器号。

我映射了网络驱动器。是的,我正在使用映射名称。即使我已登录,计划任务仍会出现相同的错误。 - Imran
2
无论你是否登录预定任务都没有关系。它使用自己的会话,而驱动器在该会话中未映射。 - MSalters
@Marc:当然会有问题,正如评论所确认的那样。症状是无法复制文件,问题是为什么。答案是UNC路径缺少驱动器号,因为登录脚本没有运行。 - MSalters

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