需要随机提取子文件夹
本帖最后由 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 =
# 随机选择指定数量的子文件夹
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() 我能写批处理,如果电脑没python环境的话更方便 xiaobaicai66 发表于 2024-11-2 23:45
我能写批处理,如果电脑没python环境的话更方便
@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运行。尽量别试极限值的情况
页:
[1]