NET使用多个服务器复制文件

时间:2016-08-07 09:44:18

标签: batch-file net-use

我想将特定文件从一台机器复制到另外5台机器,所以我的服务器列表文件包含每台机器的IP地址,如:

10.10.1.3
10.10.1.4
10.10.1.5
10.10.1.6
10.10.1.7

在我的批处理文件中:

SET File=C:\Files\servers.txt
SET User=user
SET Password=pass

      IF EXIST b:\ (
        NET USE b: /DELETE /Y
    )

        FOR /F %%A IN (%File%) DO (
                START /WAIT NET USE b: \\%%A\C$\Temp /user:%User% %Password%

                COPY C:\Logs\L1.log b:\L1.log /Y        

          IF EXIST b:\ (
                   NET USE b: /DELETE /Y
                )
        )

问题是在第一台服务器上我收到错误消息系统找不到指定的驱动器但是对于其他服务器一切都很好。 我认为它与NET USE有关,当然也许在完成复制之前删除地图网络?

批处理文件中是否有任何方法可以循环某些服务器,并且每个服务器都打开地图网络副本文件,等待复制完成后再转到下一个服务器?

修改

我有这个问题的更新: 源计算机和目标计算机都在不同的域中。 我在两台机器中都有一个用户定义为admin。 机器彼此认识(我可以在源机器中打开目标文件夹,如\ server \ C $ \ temp,我可以粘贴任何我想要的东西)

我试图复制文件而不使用网络使用,只需从C:\ file.log \ server \ c \ \ temp \ file.log复制每个服务器(我有5个),对于3个服务器,它工作,另一个两个我有一个错误:登录失败:未知的用户名或密码错误

    FOR /F %%A IN (%File%) DO (
        COPY C:\temp\file.log \\server\c$\temp\file.log /Y
  )

可能是什么问题?

请帮帮忙? 先谢谢你。

2 个答案:

答案 0 :(得分:0)

使用START命令时,如果要在同一个打开的CMD窗口中运行,则需要指定新的窗口名称,或者将其留空以双引号括起来。但是,在这种特殊情况下,您不需要使用START。尝试为列表中的第一个或所有服务器连接添加超时:

IF EXIST b:\null NET USE b: /DELETE
:: more code here

NET USE b: \\%%A\C$\Temp /user:%User% %Password%
if "%%A"=="10.10.1.3" timeout 5 >nul

答案 1 :(得分:0)

最好的方法是每台机器上的用户/密码是相同的(在整个域中共享的信誉)

在这种情况下,不需要NET USE,只需直接复制到UNC路径

FOR /F %%A IN (C:\Files\servers.txt) DO COPY /Y C:\Logs\L1.log \\%%A\C$\Temp\L1.log

我知道您在2台机器上遇到问题。如果您不是机器的管理员,则无法直接访问C $。

检查:

  • 域(远程计算机上的echo %USERDOMAIN%):所有计算机必须位于同一域中才能运行
  • 您是否是远程计算机上的管理员:如果您不是管理员,则无法使用C$技巧装载驱动器。

如果不能解决问题,可以使用替代解决方案:

在5台机器上分享C:\TEMP(读/写)同名ex:sharedtemp(或要求管理员这样做)

然后像这样调整脚本:

FOR /F %%A IN (C:\Files\servers.txt) DO COPY /Y C:\Logs\L1.log \\%%A\sharedtemp\L1.log

即使您不是管理员,您也可以通过这种方式访问​​共享。