用于将文件夹复制到域中所有XP计算机的批处理脚本

时间:2013-01-31 22:08:23

标签: batch-file

我正在尝试创建一个批处理文件,如果它们运行的​​是Windows XP,则会将文件夹复制到域中的所有计算机。我有这个:

for /f "Tokens=1 delims=$" %a in ('dsquery * domainroot -limit 300 -filter "(&(objectCategory=computer)(operatingSystem=Windows XP*))"^| dsget computer -samid^|find /V "samid" ^| find /V "dsget"') do ( robocopy \\fserver\programs\ "\\%a\C$\Documents and Settings\All Users\Application Data\" /s /R:1 /W:1)c

问题是当我运行它时,在复制到计算机名称之前添加了一个空格。 例如:

Error accessing Destination Directory \\ HP-0D9F\C$\Doc...

我如何摆脱空间?

2 个答案:

答案 0 :(得分:1)

如果您稍微更改dsquery,则可以删除额外的空间。这也消除了必须使用dsget和额外的find,因此它似乎运行得更快。此命令将查询所有Windows XP计算机的域,检索每台计算机的“名称”,过滤结果以从输出中删除列标题,并打印每台计算机的名称。

for /f %i in ('dsquery * domainroot -limit 300 -filter "(&(objectcategory=computer)(operatingsystem=Windows XP*))" -attr name ^| find /v /I "name"') do @echo %i

现在,只需在do之后添加robocopy命令即可将其作为一行命令运行,并避免生成批处理文件。

答案 1 :(得分:0)

您可以删除空间,但这必须跨越不同的行进行,所以实际上您需要在批处理文件中执行此操作

setlocal enabledelayedexpansion
for /f "Tokens=1 delims=$" %%a in ('dsquery * domainroot -limit 300 -filter "(&(objectCategory=computer)(operatingSystem=Windows XP*))"^| dsget computer -samid^|find /V "samid" ^| find /V "dsget"') do (
set pc=%%a
set pc=!pc:\\ =\\!
robocopy \\fserver\programs\ "\\!pc!\C$\Documents and Settings\All Users\Application Data\" /s /R:1 /W:1
)

有可能使用&&来连接命令,但我还没有做过任何测试,知道它是否适用于延迟扩展,如果你真的想要使用cmd /v:on它在一条线上。

相关问题