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