[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 zhengzhenhui 于 2024-8-20 18:12 编辑

比如
A目录的文件     
     小明身份证   小红毕业证  小蓝工资表
  B目录的文件夹
     122小明2331233    011小红123123      006小蓝123123
需要 把A目录包含【小明】的文件移入到B目录包含【小明】的文件夹
测试文件下载https://zhenghui.lanzouj.com/is5P927wau4b

大概是这样子的,不知道如何定义文件和文件夹相同的关键字
  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
复制代码

TOP

回复 2# zhengzhenhui

一个问题是 for /d %%d in ("%targetFolder%\*%keyword%*") do (...) 运行中如发现多个包含关键词的子目录咋办

TOP

回复 3# aloha20200628


    关键词都是不同的,文件只会是张三李四  然后包含张三的文件夹  李四的文件夹,不会出现重复名称文件夹

TOP

回复 2# zhengzhenhui


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

如 for /r %%i in (*) 本身就提供了通配符匹配功能,而代码先遍历所有文件,再判断文件名是否包含关键词
所以修改此类代码,对学习交流、或者解决问题,都没有意义,反而代码会误导他人。
bat小白,请多指教!谢谢!

TOP

回复 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

评分人数

TOP

回复 5# 77七


    那个只是贴出来参考,我看了也麻了,我自己换了几个方法测试都不不行,比如文件和文件夹共用关键词去读取,先读文件,再读文件夹按顺序移入,或者导出文件夹名做列表匹配,,或者是读取csv文件列去匹配,目前测试VBA用函数可以实现这个功能,,,

TOP

回复 6# ppll2030


    太强了 ,可以用的

TOP

本帖最后由 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
复制代码

TOP

返回列表