将文件复制到具有特定文件夹名称的多个文件夹(批处理文件)

时间:2019-01-06 18:43:05

标签: batch-file

我有一个子文件夹,如:c:\main\bot01\sb0102-> sb0199c:\main\bot99\sb9901-> sb9999

如何制作批处理文件以将1个文件复制到每个以“ sb”开头的文件夹? 因为有许多“ sb ”文件夹,所以我无法像这样对它们的每一行进行命令:

xcopy "C:\test.txt" "c:\main\bot01\sb0102" /y

2 个答案:

答案 0 :(得分:2)

您可以使用两个嵌套的计数for /l循环

  • 第一个从101到199的数字保持零。
  • 并使用子字符串仅获取后2/4位数字,这需要延迟扩展。

:: Q:\Test\2019\01\06\SO_54064719.cmd
@Echo off&SetLocal EnableDelayedExpansion

set "Sourcefile=C:\test.txt"
for /l %%B in (101,1,199) do (
    set bot=%%B
    Echo ---- bot !bot:~-2! ----
    for /l %%S in (1,1,99) do (
        Set /A sb=bot*100+%%S
        echo Copy /B /Y "%Sourcefile%" "C:\main\bot!bot:~-2!\sb!sb:~-4!"
    )
)

> Q:\Test\2019\01\06\SO_54064719.cmd
---- bot 01 ----
Copy /B /Y "C:\test.txt" "C:\main\bot01\sb0101"
Copy /B /Y "C:\test.txt" "C:\main\bot01\sb0102"
...
Copy /B /Y "C:\test.txt" "C:\main\bot01\sb0198"
Copy /B /Y "C:\test.txt" "C:\main\bot01\sb0199"
---- bot 02 ----
Copy /B /Y "C:\test.txt" "C:\main\bot02\sb0201"
Copy /B /Y "C:\test.txt" "C:\main\bot02\sb0202"
...

如果输出看起来不错,请删除副本前面的回声。

只是展示了一个Powershell解决方案,该解决方案可以在多个级别上实现范围

Get-ChildItem C:\main\bot[0-9][0-9]\sb[0-9][0-9][0-9][0-9] -Dir|ForEach-Object{
    Copy-Item C:\test.txt -Destination $_
}

要放在以cmdline / batch包裹的主题上

powershell -NoP -C "Get-ChildItem C:\main\bot[0-9][0-9]\sb[0-9][0-9][0-9][0-9] -Dir|ForEach-Object{Copy-Item C:\test.txt -Destination $_}"

答案 1 :(得分:0)

这是我的评论作为答案

从批处理文件中:

@For /D %%A In ("C:\main\bot01\sb*") Do @Copy /Y "C:\test.txt" "%%A" >Nul 2>&1

从命令提示符处:

For /D %A In ("C:\main\bot01\sb*") Do @Copy /Y "C:\test.txt" "%A" >Nul 2>&1