Скопировать файл в несколько папок с определенным именем (пакетный файл) - PullRequest
0 голосов
/ 06 января 2019

У меня есть подпапка, как: c:\main\bot01\sb0102 -> sb0199, c:\main\bot99\sb9901 -> sb9999.

Как создать пакетный файл для копирования 1 файла в каждую папку, начиная с "sb"? так как существует много папок " sb ", я не могу сделать команду для каждой из них, например:

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

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вы можете использовать два вложенных счетных цикла 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 $_}"
0 голосов
/ 06 января 2019

Вот мой комментарий как ответ

Из пакетного файла:

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...