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))]
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运行。尽量别试极限值的情况