Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件从不同的子文件夹中将具有相同文件名的文件随机拾取到一个文件夹中_Batch File_Random_Cmd - Fatal编程技术网

Batch file 批处理文件从不同的子文件夹中将具有相同文件名的文件随机拾取到一个文件夹中

Batch file 批处理文件从不同的子文件夹中将具有相同文件名的文件随机拾取到一个文件夹中,batch-file,random,cmd,Batch File,Random,Cmd,我需要从不同的子文件夹中随机挑选大约200个特定文件到一个文件夹。以下是详细信息:(tree/F/Aresult) 我想随机挑选其中3个,例如: module_01.x from folder B module_02.x from folder C module_03.x from folder C 到“dest_文件夹” 下面是我正在使用的代码,但只传送了一些,它似乎总是从一个文件夹中拾取许多文件,当它尝试从另一个文件夹复制时,它不会覆盖现有的文件(尝试了/Y,但没有成功) 有什么建议吗?多

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

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

module_01.x from folder B
module_02.x from folder C
module_03.x from folder C
到“dest_文件夹”

下面是我正在使用的代码,但只传送了一些,它似乎总是从一个文件夹中拾取许多文件,当它尝试从另一个文件夹复制时,它不会覆盖现有的文件(尝试了/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 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
文件是从
文件夹A
复制的,
module-002.x
文件是从
文件夹C
复制的,
module-003.x
文件是从
文件夹B
复制的,和
module-004.x
文件夹C中的文件

OP需要从随机选择的子文件夹中随机选择3个文件。@确认:否。OP需要从随机选择的子文件夹中“选择大约200个文件”。最后,目标文件夹必须有200个文件中的每一个…
我想随机选择其中的3个,例如:
module_01.x来自文件夹B,module_02.x来自文件夹C,module_03.x来自文件夹C@ack:是的。输出分别包含一个模块:模块_01.x、模块_02.x和模块_03.x。随机部分仅适用于文件夹。。。似乎你和我从同一个词中理解不同的东西。然而,在OP澄清这一点之前,这场讨论是徒劳的。首先谢谢你们,并为我说的不够清楚的话道歉@Aacini您了解我的想法,我希望大约200个文件从不同的文件夹随机挑选到目标文件夹。这200个文件具有相同的文件名,但位于不同的位置,例如:uuuuu文件夹1包含“module-001.x到module-200.x”、uuuuuuuuu文件夹2包含“module-001.x到module-200.x”、uuuuuuuu文件夹3包含module-001.x到module-200.x__我只需要一个批处理cmd,它可以从Folder1、Folder2或Folder3中随机选择“module-001.x到module-200.x”到目标文件夹。非常感谢。
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"