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

Posted

技术标签:

【中文标题】如果通过计划任务调用 BAT 文件,则无法将文件复制到 UNC 目标【英文标题】:Can't copy files to UNC Destinations if BAT file is called via scheduled task 【发布时间】:2012-04-27 21:17:42 【问题描述】:

我有一个 bat 文件,将文件从当前机器复制到映射的网络驱动器(一行,xcopy 命令)。

当我 RDP 到服务器时它工作。但是,当我作为计划任务运行并将其配置为在我登录的同一用户下运行时,它不起作用并给出错误 0x4。

有什么方法可以实现吗?

我也尝试了 dsynchronize,当我单击同步时它可以工作。当我将它作为服务运行时,同样的问题。

【问题讨论】:

在下面支持了对我有帮助的那个,但这个答案也帮助我在我的情况下调试它***.com/questions/8662024/… 【参考方案1】:

我能够弄清楚。以下批处理文件在调度程序下工作,即使作为本地系统帐户:

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

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

【讨论】:

【参考方案2】:

可以将文件复制到 UNC 路径而不映射为网络驱动器。 只需尝试在引号中设置 UNC 路径。

copy * "\\server\share"

没有引号,我在 Windows7 命令行上运行时遇到“语法错误”。

【讨论】:

【参考方案3】:

我有类似的问题,我想将文件从服务器复制到数百个其他服务器,而不将远程驱动器映射到我的本地 PC。我没有足够的驱动器号将数百台远程计算机映射到我的本地 PC!我不能只映射远程驱动器并复制。

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

多亏了上面的帖子,我能够创建一个小批处理文件,我只是在其中循环遍历我的主机,并继续为我的所有主机重复使用一个驱动器映射。

这是我的批处理文件...

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。您会注意到它表示只有勾选它才能访问本地资源。

【讨论】:

【参考方案5】:

谁映射网络驱动器?您是否使用映射名称,而不是底层的 UNC 本机路径?因为听起来映射驱动器是在您的登录脚本中设置的,如果您未登录,该脚本将不会运行。因此,在计划任务中,您确实拥有 UNC 路径的正确凭据,但没有映射驱动器号.

【讨论】:

我映射网络驱动器。是的,我正在使用映射名称。即使我已登录,计划任务也会出现相同的错误 是否已登录计划任务并不重要。它使用自己的会话,并且驱动器未映射到该会话中。 @Marc:当然可以,正如 cmets 所证实的那样。症状是无法复制文件,问题是为什么。答案是 UNC 路径缺少驱动器号,因为未运行登录脚本。

以上是关于如果通过计划任务调用 BAT 文件,则无法将文件复制到 UNC 目标的主要内容,如果未能解决你的问题,请参考以下文章

PHPwindow系统中设置计划任务,定时调用某接口

Windows通过定时计划任务执行bat文件

Windows通过定时计划任务执行bat文件

Windows通过定时计划任务执行bat文件

带引号的任务计划程序参数不起作用

Windows通过计划任务定时执行bat文件