在 Server 2012 上使用 Robocopy。
我已经创建了一个.cmd 脚本,用于将一些文件从映射驱动器复制到本地机器。
映射驱动器位于不同域中的另一台服务器上,并与远程域的域管理员凭据连接。域不受信任。
如果我双击 .cmd 文件并手动运行它(以域管理员身份登录),它就会起作用
但是,一旦它作为计划任务运行(也作为域管理员运行),它就会以状态代码 0 完成,但实际上并没有复制任何内容。
脚本中的简单一行:
@echo on
START /WAIT c:\windows\system32\Robocopy.exe "W:\Folder1\Folder2\Folder3\Folder4" "C:\Folder1\Folder2\Folder3\Folder4" file.txt /np /LOG+:"C:\RCLog\schtask.log"
手动运行时日志文件包含:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : 13 December 2013 10:51:59
Source : W:\Folder1\Folder2\Folder3\Folder4\
Dest : C:\Folder1\Folder2\Folder3\Folder4\
Files : file.txt
Options : /DCOPY:DA /COPY:DAT /NP /R:1000000 /W:30
------------------------------------------------------------------------------
1 W:\Folder1\Folder2\Folder3\Folder4
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 0 0 0 0
Files : 1 0 1 0 0 0
Bytes : 4.1 k 0 4.1 k 0 0 0
Times : 0:00:00 0:00:00 0:00:00 0:00:00
Ended : 13 December 2013 10:51:59
但是从计划任务运行时:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : 13 December 2013 10:44:47
2013/12/13 10:44:47 ERROR 3 (0x00000003) Getting File System Type of Source W:\Folder1\Folder2\Folder3\Folder4\
The system cannot find the path specified.
Source - W:\Folder1\Folder2\Folder3\Folder4\
Dest : C:\Folder1\Folder2\Folder3\Folder4\
Files : file.txt
Options : /DCOPY:DA /COPY:DAT /NP /R:1000000 /W:30
------------------------------------------------------------------------------
2013/12/13 10:44:47 ERROR 3 (0x00000003) Accessing Source Directory W:\Folder1\Folder2\Folder3\Folder4\
The system cannot find the path specified.
有人有什么想法吗?
谢谢
答案1
只需使用远程服务器的 UNC 路径,而不是驱动器号 W:
可能的原因是计划任务期间网络映射不可用。您也可以更改脚本以映射驱动器,执行 robocopy 并最终取消映射,但使用 UNC 路径更简单。
答案2
当作业从调度程序运行时,给定的凭据仅用于身份验证,而不是用于重新创建整个用户环境。您必须在 robocopy 命令之前直接复制到 UNC 路径或将 S: 驱动器映射到脚本中的 UNC。
回到您的问题,在脚本中,在 ROBOCOPY 命令之前添加 net use w:\netshare_path$。如果脚本发现映射驱动器使用的字母 w 将会出错,但继续使用 ROBOCOPY。如果字母 w 未被使用,则会将驱动器映射到它并在 ROBOCOPY 中使用它。如果您不需要映射驱动器,只需在脚本中 ROBOCOPY 之后输入 net use w: /delete。
所以它看起来应该是这样的:
NET USE W: \\server\drive_letter$ /USER: <USERNAME> <PASSWORD>
ROBOCOPY "W:\Folder1\Folder2\Folder3\Folder4 " "C:\Folder1\Folder2\Folder3\Folder4 " file.txt /np /LOG+:"C:\RCLog\schtask.log"
NET USE W: /delete
答案3
对于 Winrobo 复制,请使用远程服务器的 UNC 路径。