找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 9903|回复: 9

[文件操作] 【已解决】批处理如何获取当前目录下包含关键词内的文件,并复制出来?

[复制链接]
发表于 2025-3-3 17:17:16 | 显示全部楼层 |阅读模式
本帖最后由 zhengzhenhui 于 2025-3-3 22:07 编辑

如当前目录   
文件夹结构     文件夹1/三班/图片文件/需要复制的文件
                     文件夹1/四班/图片文件/需要复制的文件

结果   三班/复制的文件
        四班/复制的文件


每个班级文件夹里面都有一个叫图片文件的文件夹
把里面的文件复制出来,沿用班级名的文件夹【目录排序是固定的】班级会在二级目录

麻烦大佬出手帮忙
发表于 2025-3-3 18:33:20 | 显示全部楼层
本帖最后由 smss 于 2025-3-3 19:43 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set 关键字=图片文件
  3. for /f "delims=" %%F in ('dir /s/b "*%关键字%"')do (
  4.     set "D=%%~dpF."
  5.     robocopy "%%F" "!D!" /mov /e /njh /njs /nc /ns /np /r:1 /w:1 >nul
  6.     REM /mov 移动后自动删除源文件
  7.     REM /e 包含空子目录
  8.     REM /njh /njs /nc /ns /np 静默模式提升执行速度
  9.     REM /r:1 /w:1 失败操作自动重试
  10.     if !errorlevel!==8 (echo [!] %%F 移动失败
  11.     ) else (echo [√] %%F 移动成功
  12.     rd/s/q "%%F" 2>nul && echo [√] 删除空目录%%F成功
  13.     )
  14. )
  15. pause
复制代码
移动三级目录中的文件至上级目录 例如 D:\二年级\三班\图片文件\新建文本文档.txt—>D:\二年级\三班\新建文本文档.txt
发表于 2025-3-3 19:04:10 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-3 19:11 编辑

回复 1# zhengzhenhui

以下代码存为 test.bat 放在 ‘文件夹1’ 目录中运行...

  1. @echo off &for /f "delims=" %%d in ('dir /b/s/ad "图片文件" ') do copy /y "%%d\*.*" "%%~dpd">nul
  2. pause&exit/b
复制代码
 楼主| 发表于 2025-3-3 19:27:09 | 显示全部楼层
本帖最后由 zhengzhenhui 于 2025-3-3 19:35 编辑

回复 3# aloha20200628


    抱歉,可能是我没表达清楚

结构  文件夹1/三班/文件***/需要复制的文件
        文件夹1/四班/文件***/需要复制的文件


结果          三班/复制的文件
                四班/复制的文件
就是文件放在当前目录中,复制的文件沿用/b /s就是三班 这个文件夹名
但是会出现好几个三班,所以还得避免重复,谢谢您了
 楼主| 发表于 2025-3-3 19:44:51 | 显示全部楼层
本帖最后由 zhengzhenhui 于 2025-3-3 19:48 编辑

回复 2# smss



    谢谢您, 但是文件夹如果在底下子文件夹,就会移动或者复制图片失败


结构  文件夹1/三班/文件***/***/需要复制的文件
        文件夹1/四班/文件***/需要复制的文件


结果          三班/复制的文件
                四班/复制的文件
发表于 2025-3-3 19:56:38 | 显示全部楼层
回复  smss



    谢谢您, 但是文件夹如果在底下子文件夹,就会移动或者复制图片失败


结构  文 ...
zhengzhenhui 发表于 2025-3-3 19:44



你是想移动到上一级 还是想把所有子目录下文件也移动到固定的三班 四班(相对脚本来说二级目录)
表述清楚能让问题迅速彻底解决,亏你还当老师呢 真替学生 家长 校长 堪忧
 楼主| 发表于 2025-3-3 20:05:10 | 显示全部楼层
本帖最后由 zhengzhenhui 于 2025-3-3 20:08 编辑

回复 6# smss


    不好意思。我给您发个测试包,这样直观一些https://zhenghui.lanzouu.com/iLG4V2pgy80b  复制出来的结果是放在批处理那边的  ,就是每个班级都有这个关键词的文件夹不会重复,就是放的目录层级不同
发表于 2025-3-3 21:38:08 | 显示全部楼层
本帖最后由 smss 于 2025-3-3 22:52 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 设置源目录、目标目录和关键词(按实际情况设置)
  3. set "source=D:\学校"
  4. set "target=D:\结果"
  5. set "keyword=关键词"

  6. if exist "%target%" rd/s/q "%target%" >nul
  7. rem 遍历每个班级目录(二级目录)
  8. for /d %%a in ("%source%\*")do (set "class=%%~nxa"
  9.     if not exist "%target%\!class!" md "%target%\!class!"
  10.     rem 查找班级目录下所有包含关键词的子目录
  11.     for /f "delims=" %%b in ('dir /s/b/ad "%%a\*" ^|findstr /i /r "\\%keyword%$"')do (pushd "%%b"
  12.         rem 递归遍历子目录中的文件
  13.         for /r %%c in (*)do (set "dest=%target%\!class!\%%~nxc"
  14.             if exist "!dest!" set n=1&set "nc=%%~nc"&set "xc=%%~xc"&call :check
  15.             echo 复制 [%%c] 到 [!dest!]
  16.             copy "%%c" "!dest!" >nul
  17.         )
  18.         popd
  19.     )
  20. )
  21. endlocal

  22. echo 文件复制完成!
  23. echo 按任意键退出!
  24. pause >nul&exit/b
  25. :check
  26. :: 如果有同名文件 则以原名(1)递增数字命名
  27. set "dest=%target%\!class!\!nc!(!n!)!xc!"
  28. if exist "!dest!" set/a n+=1&goto check
  29. exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
zhengzhenhui + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-3-3 21:46:06 | 显示全部楼层
本帖最后由 zhengzhenhui 于 2025-3-3 22:08 编辑

回复 8# smss


    谢谢你了
发表于 2025-3-3 23:48:44 | 显示全部楼层
回复 4# zhengzhenhui

根据网盘提供的示例目录结构,订正3楼代码如下,存于 ‘XXXX学校’ 目录下运行...
先锚定 ‘XXXX学校’ 目录下的每一个班级子目录,再从中获取其下的关键词子目录并将其中的全部文件复制到当前的班级子目录中...

  1. @echo off &for /f "delims=" %%D in ('dir /b/ad "*班*" ') do for /f "delims=" %%d in ('dir /b/s/ad "%%D\*关键词*" ') do copy /y "%%d\*.*" "%%D"
  2. pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:43 , Processed in 0.024616 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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