标题: [文件操作] 【已解决】批处理如何把包含部分关键词的文件,移入包含相同关键词的文件夹内? [打印本页]
作者: zhengzhenhui 时间: 2024-8-20 00:43 标题: 【已解决】批处理如何把包含部分关键词的文件,移入包含相同关键词的文件夹内?
本帖最后由 zhengzhenhui 于 2024-8-20 18:12 编辑
比如
A目录的文件
小明身份证 小红毕业证 小蓝工资表
B目录的文件夹
122小明2331233 011小红123123 006小蓝123123
需要 把A目录包含【小明】的文件移入到B目录包含【小明】的文件夹
测试文件下载https://zhenghui.lanzouj.com/is5P927wau4b
作者: zhengzhenhui 时间: 2024-8-20 14:14
大概是这样子的,不知道如何定义文件和文件夹相同的关键字- @echo off
- setlocal EnableDelayedExpansion
-
- rem 设置源目录和目标目录
- set "sourceFolder=C:\Users\Administrator\Desktop\测试\1移动文件"
- set "targetFolder=C:\Users\Administrator\Desktop\测试\2目的地"
-
- rem 定义关键词
- set "keyword=赵小强"
-
- rem 遍历源目录下的文件
- for /r "%sourceFolder%" %%f in (*.*) do (
- set "fileName=%%~nxf"
- if not "!fileName!"=="!fileName:*%keyword%=!" (
- rem 在目标目录下查找包含关键词的文件夹
- for /d %%d in ("%targetFolder%\*%keyword%*") do (
- set "targetSubFolder=%%d"
- echo Moving "%%f" to "!targetSubFolder!"
- move "%%f" "!targetSubFolder!" >nul 2>nul
- if!errorlevel! NEQ 0 (
- echo Failed to move "%%f" to "!targetSubFolder!". Error code:!errorlevel!
- rem 尝试处理一些常见错误
- if!errorlevel! equ 2 (
- echo Permission denied. Check folder permissions.
- ) elseif!errorlevel! equ 3 (
- echo File not found. Double-check the source file path.
- ) elseif!errorlevel! equ 5 (
- echo Access denied. Check file permissions.
- ) else (
- echo Unknown error occurred. Error code:!errorlevel!
- )
- )
- )
- )
- )
-
- echo All files have been processed.
- pause
- endlocal
复制代码
作者: aloha20200628 时间: 2024-8-20 15:49
回复 2# zhengzhenhui
一个问题是 for /d %%d in ("%targetFolder%\*%keyword%*") do (...) 运行中如发现多个包含关键词的子目录咋办
作者: zhengzhenhui 时间: 2024-8-20 17:15
回复 3# aloha20200628
关键词都是不同的,文件只会是张三李四 然后包含张三的文件夹 李四的文件夹,不会出现重复名称文件夹
作者: 77七 时间: 2024-8-20 17:27
回复 2# zhengzhenhui
看了楼主的提供的ai代码我有点怀疑自己了,elseif 还是else if...move命令居然有这么多返回值...
if!errorlevel! 可以没有空格吗...
楼主发代码前自己试过代码吗?
如 for /r %%i in (*) 本身就提供了通配符匹配功能,而代码先遍历所有文件,再判断文件名是否包含关键词
所以修改此类代码,对学习交流、或者解决问题,都没有意义,反而代码会误导他人。
作者: ppll2030 时间: 2024-8-20 17:30
回复 4# zhengzhenhui
根据提供的测试包,假设2目的地文件夹下没有重复关键字(人名)的情况,
把下面的代码保存为bat文件,放在测试包下运行即可。- @echo off
- pushd "%~dp02目的地"
- for /f "delims=" %%i in ('dir /b /ad') do (
- for /f "delims=0123456789" %%j in ("%%i") do (
- move "%~dp01移动文件\*%%j*" "%%i\"
- )
- )
- popd&pause&exit/b
复制代码
作者: zhengzhenhui 时间: 2024-8-20 18:04
回复 5# 77七
那个只是贴出来参考,我看了也麻了,我自己换了几个方法测试都不不行,比如文件和文件夹共用关键词去读取,先读文件,再读文件夹按顺序移入,或者导出文件夹名做列表匹配,,或者是读取csv文件列去匹配,目前测试VBA用函数可以实现这个功能,,,
作者: zhengzhenhui 时间: 2024-8-20 18:11
回复 6# ppll2030
太强了 ,可以用的
作者: aloha20200628 时间: 2024-8-20 18:57
本帖最后由 aloha20200628 于 2024-8-20 19:01 编辑
回复 1# zhengzhenhui
根据一楼示例 》以下代码存为 test.bat 置于 A,B 同目录下运行...
- @echo off &for %%w in (
- 小明, 小红, 小蓝
- ) do for /d %%d in ("B\*%%w*") do move /y "A\*%%w*.*" "%%d\"
- pause&exit/b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |