Windows 如何随机选择一定数量的文件(相同的文件名,但4/5个不同的扩展名)并将其移动到另一个文件夹?

Windows 如何随机选择一定数量的文件(相同的文件名,但4/5个不同的扩展名)并将其移动到另一个文件夹?,windows,batch-file,random,cmd,move,Windows,Batch File,Random,Cmd,Move,我有一个目录,其中有数百个文件,具有描述性的不同名称,但扩展名始终相同(示例): 扫描将始终位于文件名的末尾,并且始终是同一个单词)* 下一组: 我要这批货 随机选择一些文件(比如10个),然后 将具有相同文件名的所有关联文件(即两个MID、jpg、ran和zip)复制到不同的目录 例如,如果其中一组文件缺少jpg文件或mid文件,我不希望停止批处理,而只是将现有文件复制到新文件夹中,然后转到下一个随机选择的组 我发现了一个可以随机移动一个MIDI文件的批处理代码,但我不确定如何插入指定所有文件

我有一个目录,其中有数百个文件,具有描述性的不同名称,但扩展名始终相同(示例):

扫描将始终位于文件名的末尾,并且始终是同一个单词)*

下一组:

我要这批货

随机选择一些文件(比如10个),然后 将具有相同文件名的所有关联文件(即两个MID、jpg、ran和zip)复制到不同的目录

例如,如果其中一组文件缺少jpg文件或mid文件,我不希望停止批处理,而只是将现有文件复制到新文件夹中,然后转到下一个随机选择的组

我发现了一个可以随机移动一个MIDI文件的批处理代码,但我不确定如何插入指定所有文件名相同但扩展名不同的文件也应该被移动的代码

@echo off
set folder=C:\Test1
set destfolder=C:\Test2

for /f "delims=" %%C in ('dir /b /a-d "%folder%\*.mid" ^| find /c /v ""') do set /A num=%random% %% %%C
for /f "delims=" %%F in ('dir /b /a-d "%folder%\*.mid" ^| more +%num%') do set name=%%F & goto next

:next

echo (By the way, I chose %name% )
move "%folder%\%name%" "%destfolder%\%name%"
用户Mofi善意地提供了此帮助

复制以相同字符串开头的所有文件的命令为copy %FileName%。“C:\Destination Folder”和环境变量 文件名由随机选择其中一个文件的代码定义 例如,将组设置为“FileName=HeyJude(披头士)”。更多 safe将使用两个复制命令行:复制“%FileName%.*” “C:\Destination Folder”并复制“%FileName%Scan.mid”C:\Destination 文件夹“2>nul,如果有HeyJude(披头士乐队)的文件集 和HeyJude(披头士乐队)现场直播和档案集HeyJude(披头士乐队)应该 将被复制到目标文件夹

但我不知道如何将其插入现有代码中。我试着编辑最后一行

move”%folder%\%name%*.*.

但是没有任何文件被移动,系统也找不到任何匹配的文件名


感谢您的帮助!

对于随机选择文件,您可以使用
%random%
并迭代10次。这将随机选择10个文件名,然后复制文件名`.*表示将复制具有给定名称和任何扩展名的任何文件

@echo off & setlocal enabledelayedexpansion
set "folder=C:\Test1"
set "destfolder=C:\Test2"
set num=0
pushd "%folder%"
for %%a in (*.*) do (
   set /a num+=1
   set "name[!num!]=%%~na"
)
for /l %%i in (1,1,10) do (
   call :randm
 )
popd
goto :eof
:randm
set /a "rnd=(num*%random%)/32768+1"
copy "!name[%rnd%]!*" "%destfolder%"

对于随机选择文件,您可以使用
%random%
并迭代10次。这将随机选择10个文件名,然后复制文件名`.*,这意味着将复制具有给定名称和任何扩展名的任何文件

@echo off & setlocal enabledelayedexpansion
set "folder=C:\Test1"
set "destfolder=C:\Test2"
set num=0
pushd "%folder%"
for %%a in (*.*) do (
   set /a num+=1
   set "name[!num!]=%%~na"
)
for /l %%i in (1,1,10) do (
   call :randm
 )
popd
goto :eof
:randm
set /a "rnd=(num*%random%)/32768+1"
copy "!name[%rnd%]!*" "%destfolder%"

非常感谢,这似乎对第一个文件起作用,但对下一个文件遇到问题..输出如下:非常感谢,这似乎对第一个文件起作用,但对下一个文件遇到问题..输出如下:
@echo off & setlocal enabledelayedexpansion
set "folder=C:\Test1"
set "destfolder=C:\Test2"
set num=0
pushd "%folder%"
for %%a in (*.*) do (
   set /a num+=1
   set "name[!num!]=%%~na"
)
for /l %%i in (1,1,10) do (
   call :randm
 )
popd
goto :eof
:randm
set /a "rnd=(num*%random%)/32768+1"
copy "!name[%rnd%]!*" "%destfolder%"