【问题标题】:How to select randomly a certain number of files (same filename but 4/5 different extensions) and move them to another folder?如何随机选择一定数量的文件(相同的文件名但 4/5 不同的扩展名)并将它们移动到另一个文件夹?
【发布时间】:2020-08-17 06:43:47
【问题描述】:

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

LetItBe(TheBeatles).mid
LetItBe(TheBeatles).jpg
LetItBe(TheBeatles).ran
LetItBe(TheBeatles).zip
LetItBe(TheBeatles)Scan.mid

扫描总是在文件名的末尾并且总是相同的单词)*

下一组:

HeyJude(TheBeatles).mid
HeyJude(TheBeatles).jpg
HeyJude(TheBeatles).ran
HeyJude(TheBeatles).zip
HeyJude(TheBeatles)Scan.mid

我希望批次

随机选择一些文件(比如 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 文件夹” FileName 由随机选择文件之一的代码定义 组,例如,设置“FileName=HeyJude(TheBeatles)”。更多的 安全将使用两个 COPY 命令行:复制“%FileName%.*” "C:\Destination 文件夹" 并复制 "%FileName%Scan.mid" "C:\Destination Folder" 2>nul 如果有文件集 HeyJude(TheBeatles) 和 HeyJude(TheBeatles) Live 和文件集 HeyJude(TheBeatles) 应该 复制到目标文件夹。

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

move "%folder%\%name%*.*

然后根本没有文件被移动,系统找不到任何匹配的文件名。

帮助表示赞赏!

【问题讨论】:

    标签: windows batch-file random cmd move


    【解决方案1】:

    对于随机选择文件,您可以使用%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%"
    

    【讨论】:

    • 非常感谢,这似乎对第一个文件有用,但对下一个文件有问题。输出如下:
    猜你喜欢
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2011-07-29
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多