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

[文件操作] 【已解决】批处理如何把包含部分关键词的文件,移入包含相同关键词的文件夹内?

[复制链接]
发表于 2024-8-20 00:43:32 | 显示全部楼层 |阅读模式
本帖最后由 zhengzhenhui 于 2024-8-20 18:12 编辑

比如
A目录的文件     
     小明身份证   小红毕业证  小蓝工资表
  B目录的文件夹
     122小明2331233    011小红123123      006小蓝123123
需要 把A目录包含【小明】的文件移入到B目录包含【小明】的文件夹
测试文件下载https://zhenghui.lanzouj.com/is5P927wau4b
 楼主| 发表于 2024-8-20 14:14:31 | 显示全部楼层
大概是这样子的,不知道如何定义文件和文件夹相同的关键字
  1. @echo off
  2. setlocal EnableDelayedExpansion

  3. rem 设置源目录和目标目录
  4. set "sourceFolder=C:\Users\Administrator\Desktop\测试\1移动文件"
  5. set "targetFolder=C:\Users\Administrator\Desktop\测试\2目的地"

  6. rem 定义关键词
  7. set "keyword=赵小强"

  8. rem 遍历源目录下的文件
  9. for /r "%sourceFolder%" %%f in (*.*) do (
  10.     set "fileName=%%~nxf"
  11.     if not "!fileName!"=="!fileName:*%keyword%=!" (
  12.         rem 在目标目录下查找包含关键词的文件夹
  13.         for /d %%d in ("%targetFolder%\*%keyword%*") do (
  14.             set "targetSubFolder=%%d"
  15.             echo Moving "%%f" to "!targetSubFolder!"
  16.             move "%%f" "!targetSubFolder!" >nul 2>nul
  17.             if!errorlevel! NEQ 0 (
  18.                 echo Failed to move "%%f" to "!targetSubFolder!". Error code:!errorlevel!
  19.                 rem 尝试处理一些常见错误
  20.                 if!errorlevel! equ 2 (
  21.                     echo Permission denied. Check folder permissions.
  22.                 ) elseif!errorlevel! equ 3 (
  23.                     echo File not found. Double-check the source file path.
  24.                 ) elseif!errorlevel! equ 5 (
  25.                     echo Access denied. Check file permissions.
  26.                 ) else (
  27.                     echo Unknown error occurred. Error code:!errorlevel!
  28.                 )
  29.             )
  30.         )
  31.     )
  32. )

  33. echo All files have been processed.
  34. pause
  35. endlocal
复制代码
发表于 2024-8-20 15:49:15 | 显示全部楼层
回复 2# zhengzhenhui

一个问题是 for /d %%d in ("%targetFolder%\*%keyword%*") do (...) 运行中如发现多个包含关键词的子目录咋办
 楼主| 发表于 2024-8-20 17:15:30 | 显示全部楼层
回复 3# aloha20200628


    关键词都是不同的,文件只会是张三李四  然后包含张三的文件夹  李四的文件夹,不会出现重复名称文件夹
发表于 2024-8-20 17:27:16 | 显示全部楼层
回复 2# zhengzhenhui


   看了楼主的提供的ai代码我有点怀疑自己了,elseif 还是else if...move命令居然有这么多返回值...
if!errorlevel! 可以没有空格吗...
楼主发代码前自己试过代码吗?

如 for /r %%i in (*) 本身就提供了通配符匹配功能,而代码先遍历所有文件,再判断文件名是否包含关键词
所以修改此类代码,对学习交流、或者解决问题,都没有意义,反而代码会误导他人。
发表于 2024-8-20 17:30:09 | 显示全部楼层
回复 4# zhengzhenhui


    根据提供的测试包,假设2目的地文件夹下没有重复关键字(人名)的情况,
把下面的代码保存为bat文件,放在测试包下运行即可。
  1. @echo off
  2. pushd "%~dp02目的地"
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.         for /f "delims=0123456789" %%j in ("%%i") do (
  5.                 move "%~dp01移动文件\*%%j*" "%%i"
  6.         )
  7. )
  8. popd&pause&exit/b
复制代码

评分

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

查看全部评分

 楼主| 发表于 2024-8-20 18:04:39 | 显示全部楼层
回复 5# 77七


    那个只是贴出来参考,我看了也麻了,我自己换了几个方法测试都不不行,比如文件和文件夹共用关键词去读取,先读文件,再读文件夹按顺序移入,或者导出文件夹名做列表匹配,,或者是读取csv文件列去匹配,目前测试VBA用函数可以实现这个功能,,,
 楼主| 发表于 2024-8-20 18:11:29 | 显示全部楼层
回复 6# ppll2030


    太强了 ,可以用的
发表于 2024-8-20 18:57:30 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-8-20 19:01 编辑

回复 1# zhengzhenhui

根据一楼示例 》以下代码存为 test.bat 置于 A,B 同目录下运行...

  1. @echo off &for %%w in (
  2.       小明, 小红, 小蓝
  3. ) do for /d %%d in ("B\*%%w*") do move /y "A\*%%w*.*" "%%d"
  4. pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 21:02 , Processed in 0.025026 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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