1

我想将特定文件从一台机器复制到其他 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有关,当然也许地图网络在完成复制之前就被删除了?

批处理文件中是否有任何方法可以循环一些服务器,并且为每个服务器打开地图网络复制文件等到复制完成并继续移动到下一个服务器?

编辑:

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

我尝试在不使用 net use 的情况下复制文件,只从 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
  )

可能是什么问题?

请帮忙?提前谢谢你。

4

2 回答 2

0

最好的方法是,如果每台机器上的用户/密码都相同(在整个域中共享的凭据)

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

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

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

查看:

  • 域(echo %USERDOMAIN%在远程机器上):所有机器必须在同一个域上才能工作
  • 无论您是否是远程计算机上的管理员:C$如果您不是管理员,则无法使用该技巧安装驱动器。

如果这不起作用,您可以使用另一种解决方案:

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

然后像这样调整脚本:

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

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

于 2016-08-07T12:44:18.787 回答
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
于 2016-08-07T12:26:01.967 回答