吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 152|回复: 3
收起左侧

[经验求助] 需要随机提取子文件夹

[复制链接]
kaijie117 发表于 2024-11-2 21:02
49吾爱币
本帖最后由 kaijie117 于 2024-11-2 21:12 编辑

例如
母文件夹
    ---子文件夹1
    ---子文件夹2
    ---子文件夹3
    ---子文件夹4
    ---子文件夹5
......
    ---子文件夹1000

选择母文件夹路径
输入数字=数量
将对应数量的子文件夹和内部文件随机提取到另一个选择的目录

最佳答案

查看完整内容

import os import shutil import random def select_folders(src_dir, num_folders, dest_dir): # 确保目标目录存在 if not os.path.exists(dest_dir): os.makedirs(dest_dir) # 获取所有子文件夹 folders = [os.path.join(src_dir, d) for d in os.listdir(src_dir) if os.path.isdir(os.path.join(src_dir, d))] # 随机选择指定数量的子文件夹 selected_folders = rand ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Aircus 发表于 2024-11-2 21:02
import os
import shutil
import random

def select_folders(src_dir, num_folders, dest_dir):
    # 确保目标目录存在
    if not os.path.exists(dest_dir):
        os.makedirs(dest_dir)
   
    # 获取所有子文件夹
    folders = [os.path.join(src_dir, d) for d in os.listdir(src_dir) if os.path.isdir(os.path.join(src_dir, d))]
   
    # 随机选择指定数量的子文件夹
    selected_folders = random.sample(folders, min(num_folders, len(folders)))
   
    # 复制选中的子文件夹到目标目录
    for folder in selected_folders:
        # 创建目标路径
        dest_path = os.path.join(dest_dir, os.path.basename(folder))
        # 复制文件夹及其内容
        shutil.copytree(folder, dest_path, dirs_exist_ok=True)
        print(f"Copied '{folder}' to '{dest_path}'")

def main():
    # 用户输入母文件夹路径
    src_dir = input("请输入母文件夹路径: ")
    # 用户输入需要提取的子文件夹数量
    num_folders = int(input("请输入需要提取的子文件夹数量: "))
    # 用户输入目标目录路径
    dest_dir = input("请输入目标目录路径: ")
   
    # 执行选择和复制操作
    select_folders(src_dir, num_folders, dest_dir)

if __name__ == "__main__":
    main()
xiaobaicai66 发表于 2024-11-2 23:45
我能写批处理,如果电脑没python环境的话更方便
xiaobaicai66 发表于 2024-11-2 23:52
xiaobaicai66 发表于 2024-11-2 23:45
我能写批处理,如果电脑没python环境的话更方便

[Asm] 纯文本查看 复制代码
@echo off
setlocal enabledelayedexpansion

REM 选择母文件夹路径
set "source_folder="
set /p "source_folder=请输入母文件夹路径: "
if not exist "!source_folder!" (
    echo 指定的路径不存在,请检查路径后重试。
    exit /b
)

REM 输入要提取的子文件夹数量
set "num_folders="
set /p "num_folders=请输入要提取的子文件夹数量: "
if !num_folders! lss 1 (
    echo 数量必须大于0,请重试。
    exit /b
)

REM 创建目标文件夹
set "target_folder="
set /p "target_folder=请输入目标文件夹路径: "
if not exist "!target_folder!" (
    mkdir "!target_folder!"
    echo 创建目标文件夹: "!target_folder!"
)

REM 创建临时文件
set "temp_file=temp_folders.txt"
> "!temp_file!" (
    REM 收集所有子文件夹并写入临时文件
    for /d %%D in ("%source_folder%\*") do (
        echo %%~nxD
    )
)

REM 计算子文件夹的数量
set "count=0"
for /F "usebackq delims=" %%F in ("!temp_file!") do (
    set /a count+=1
)

REM 检查是否有足够的子文件夹
if !count! lss !num_folders! (
    echo 可用的子文件夹数量不足,请减少数量。
    del "!temp_file!"
    exit /b
)

REM 随机选择子文件夹并移动
for /L %%i in (1,1,!num_folders!) do (
    set /a "rand=!random! %% count"

    REM 从临时文件中获取选中的文件夹
    set "selected_folder="
    for /F "usebackq delims=" %%F in ("!temp_file!") do (
        if !rand! equ 0 (
            set "selected_folder=%%F"
        )
        set /a rand-=1
    )

    REM 移动选中的文件夹
    if defined selected_folder (
        echo 正在移动文件夹: "!source_folder!\!selected_folder!" 到 "!target_folder!"
        move "!source_folder!\!selected_folder!" "!target_folder!\" >nul

        REM 从临时文件中移除选中的文件夹
        findstr /v /x "!selected_folder!" "!temp_file!" > temp2.txt
        move /y temp2.txt "!temp_file!" >nul
        set /a count-=1
    )
)

REM 删除临时文件
del "!temp_file!"

echo 所有操作完成!
pause

因为里面有中文,所以记事本写txt最后保存完直接修改bat后缀运行会乱码,所以保存的时候,另存为,保存类型不要选文本文档,要选下面的”所有文件(*.*)“;还有下面编码把UTF-8改成ANSI。再保存后修改后缀为bat运行。尽量别试极限值的情况
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表