Batch file NET使用多个服务器复制文件
我想将特定文件从一台机器复制到其他5台机器,因此我有一个服务器列表文件,其中包含每台机器的ip地址,如:Batch file NET使用多个服务器复制文件,batch-file,net-use,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
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
)
)
问题是在我收到的第一个服务器错误消息中,系统找不到指定的驱动器,但对于其他服务器,一切都很好。
我想这是网络使用的问题当然可能地图网络在完成复制之前被删除了
在批处理文件中是否有任何方法循环某些服务器,并为每个服务器打开映射网络拷贝文件,直到拷贝完成并移动到下一个服务器
编辑:
我有此问题的更新:
源计算机和目标计算机都位于不同的域中。
我在这两台机器上都有一个用户定义为admin。
机器相互认识(我可以打开源机器中的目标文件夹,如\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
)
有什么问题吗
请帮忙?
高级版谢谢。使用START命令时,如果希望在同一个open 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
使用START命令时,如果希望在同一个opencmd窗口中运行,则需要指定新窗口名,或者在双引号中将其保留为空。但是,在这种特殊情况下不需要使用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
最好的方法是,如果每台计算机上的用户/密码都相同(整个域共享credientals) 在这种情况下,无需使用网络,只需直接复制到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
(读/写)作为相同的名称,例如:sharedtemp(或要求管理员这样做)
然后像这样调整脚本:
FOR /F %%A IN (C:\Files\servers.txt) DO COPY /Y C:\Logs\L1.log \\%%A\sharedtemp\L1.log
即使您不是管理员,也可以通过这种方式访问共享。最好的方式是每台计算机上的用户/密码相同(整个域中共享的credientals) 在这种情况下,无需使用网络,只需直接复制到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
(读/写)作为相同的名称,例如:sharedtemp(或要求管理员这样做)
然后像这样调整脚本:
FOR /F %%A IN (C:\Files\servers.txt) DO COPY /Y C:\Logs\L1.log \\%%A\sharedtemp\L1.log
即使您不是管理员,也可以通过这种方式访问共享。在这种情况下,为什么要使用
start
<代码>仅使用网络即可。/DELETE:YES
生成语法错误。它只是/delete
。既然如此,为什么要使用start
<代码>仅使用网络即可。/DELETE:YES
生成语法错误。仅限/delete
。源计算机与目标计算机位于不同的域源计算机与目标计算机位于不同的域不是吗NET USE b:/delete:Y[ES]
而不是NET USE b:/delete/Y
?无需将start命令与NET命令一起使用。批处理文件是顺序处理。下一个命令直到上一个命令完成后才执行。@aschipfl:这只是net use b:/delete
Ah,是的,@Stephan;所以我想,/Y
在这里是完全无用的?@aschipfl是的,对我来说似乎完全无用。但令人惊讶的是,它没有产生任何错误。它不是NET USE b:/DELETE:Y[ES]
而不是NET USE b:/DELETE/Y
?不需要将start命令与NET命令一起使用。批处理文件是顺序处理。下一个命令直到上一个命令完成后才执行。@aschipfl:这只是net use b:/delete
Ah,是的,@Stephan;所以我想,/Y
在这里是完全无用的?@aschipfl是的,对我来说似乎完全无用。但令人惊讶的是,它没有产生任何错误。