Я не понимаю, как вы обрабатываете файлы ... Если во всех подпапках есть одинаковые файлы (как вы указали в "подробностях"), тогда вам не нужно обрабатывать все файлы , но только файлы из одной подпапки , а затем случайным образом выберите подпапку реального источника ...
@echo off
setlocal EnableDelayedExpansion
set "source_folder=test"
set "dest_folder=output"
del "%dest_folder%\*.x"
pushd "%source_folder%"
rem Create the subFolder array
set "n=0"
for /D %%a in (*) do (
set /A n+=1
set "subFolder[!n!]=%%a"
)
rem Process all files in first subfolder
pushd "%subFolder[1]%"
for %%a in (*.x) do (
rem Select a random subfolder
set /A "ran=!random! %% n + 1"
rem Pick the file from such random subfolder
for /F %%r in ("!ran!") do copy "..\!subFolder[%%r]!\%%a" "..\%dest_folder%"
)
РЕДАКТИРОВАТЬ : Добавлен простой тест
Я проверил этот код следующим образом: я создал три папки и добавил четыре * .x файла в каждую из них.Затем я добавил команду ECHO
перед copy
, то есть:
for /F %%r in ("!ran!") do ECHO copy "..\!subFolder[%%r]!\%%a" "..\%dest_folder%"
Наконец я запустил программу.Это вывод:
copy "..\folder A\module-001.x" "..\output"
copy "..\folder C\module-002.x" "..\output"
copy "..\folder B\module-003.x" "..\output"
copy "..\folder C\module-004.x" "..\output"
Это означает, что файл module-001.x
скопирован из folder A
, module-002.x
файл из folder C
, module-003.x
файл из folder B
и module-004.x
файл из folder C
.