批处理文件从不同的子文件夹中随机选取文件名相同的文件到一个文件夹



我需要从不同的子文件夹中随机选择大约 200 个特定文件到一个文件夹中。以下是详细信息:(tree /F /A结果(

+--- source_folder
|   +--- Folder A
|   |      module_01.x
|   |      module_02.x
|   |      module_03.x
|   +--- Folder B
|   |      module_01.x
|   |      module_02.x
|   |      module_03.x
|   +--- Folder C
|   |      module_01.x
|   |      module_02.x
|   |      module_03.x

我想随机选择其中的 3 个,例如:

module_01.x from folder B
module_02.x from folder C
module_03.x from folder C

到"dest_folder"。

以下是我正在使用的代码,但只穿梭了几个,它似乎总是从一个文件夹中选择许多文件,当它尝试从另一个文件夹复制时,它不会覆盖现有的文件(尝试了/Y 但没有运气(。

有什么建议吗?谢谢!

@echo off&setlocal enabledelayedexpansion
set "source_folder=test"
set "dest_folder=output"
set /a filecount=193
del "dest_folder*.x"
pushd "source_folder"
for /r %%i in (*.x) do set /a files+=1& set "$!files!=%%~i"
popd
pushd "dest_folder"
:randomloop
set /a rd=%random%%%files+1
set "sco=!$%rd%!"
if not defined x goto :randomloop
set "$%rd%="
for %%i in ("%x%") do if exist "%%~nxi" echo "%%~nxi" already exist in %out%.& goto:randomloop
copy "%x%" /Y
set /a filecount-=1
if %filecount% gtr 0 goto:randomloop
popd
pause

我不明白你处理文件的方式...如果所有子文件夹都有相同的文件(如您在"详细信息"中指定的那样(,那么您不需要处理所有文件,而只需要处理一个子文件夹中的文件,然后随机选择真正的源子文件夹......

@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 文件。然后,我在copy命令之前添加了一个ECHO命令,即:

for /F %%r in ("!ran!") do ECHO copy "..!subFolder[%%r]!%%a" "..%dest_folder%"

最后我运行了该程序。这是输出:

copy "..folder Amodule-001.x" "..output"
copy "..folder Cmodule-002.x" "..output"
copy "..folder Bmodule-003.x" "..output"
copy "..folder Cmodule-004.x" "..output"

这意味着module-001.x文件是从folder A复制的,module-002.x文件是从folder C复制的,module-003.x文件是从folder B复制的,module-004.x文件是从folder C复制的。

最新更新