Batch file 将文件夹复制到域中所有XP计算机的批处理脚本
我正在尝试创建一个批处理文件,如果域中的所有计算机运行的是windows XP,则该文件会将文件夹复制到这些计算机。我有这个:Batch file 将文件夹复制到域中所有XP计算机的批处理脚本,batch-file,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" ^| fin
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...
如何消除空间?您可以删除空间,但这必须跨单独的行进行,所以实际上您需要在批处理文件中执行此操作
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
。您可以删除空间,但这必须跨单独的行执行,实际上,您需要在批处理文件中执行此操作
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
。如果您稍微更改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
之后添加robocy命令,就可以将其作为一行命令运行,避免生成批处理文件。如果稍微更改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命令,就可以将其作为一行命令运行,避免生成批处理文件。它仍然包含空间。它仍然包含空间。