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

[文件操作] [已解决]批处理根据txt中关键字查找并复制文件

[复制链接]
发表于 2024-10-8 15:12:28 | 显示全部楼层 |阅读模式
txt中含有文件名关键词
abc123
abc456
...


要在指定目录下C:\MyFile中(包含所有子文件夹和子子文件夹...)  查找所有含有这些此关键词的rar文件   并复制到指定路径下C:\Test。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-10-8 15:36:06 | 显示全部楼层
回复 1# gddsssko

  1. @echo off
  2. cd/dC:\MyFile
  3. for /f "tokens=*" %%a in ('dir *abc123*.rar *abc456*.rar /b/s') do copy "%%~a" "C:\Test"
复制代码
发表于 2024-10-8 16:05:27 | 显示全部楼层
回复 1# gddsssko

楼主又修改了需求 ,之后的实现方式如下:

  1. @echo off
  2. cd/dC:\MyFile
  3. for /f "tokens=*" %%a IN (文件名关键词.txt) DO @for /f "tokens=*" %%b in ('dir "*%%~a*.rar" /b/s') do copy "%%~b" "C:\Test"
复制代码

评分

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

查看全部评分

 楼主| 发表于 2024-10-8 16:45:47 | 显示全部楼层
回复 3# hfxiang


    感谢大佬。
发表于 2024-10-9 09:18:16 | 显示全部楼层
关键词文本文件及批处理文件放在 C:\myfile 路径下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (KeyWord.txt) do set KeyWord=!KeyWord!"*%%i*.rar"
  4. for /f "delims=" %%i in ('dir /b /s /a-d %KeyWord%') do copy "%%i" "c:\test"
  5. pause
复制代码
这样应当效率更高些,不需要每个关键词都要使用一次for /f +dir循环体。
发表于 2024-10-9 10:33:13 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-10-9 10:40 编辑


各有看点》3楼代码采用逐行处理关键词,不限于关键词行数或总字符量,5楼代码受限于 'dir /b/s "..." "..." ...' 整个命令行长度,似乎系统限制命令行长度为8k字符量...
发表于 2024-10-9 10:40:35 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-10-9 10:54 编辑

回复 6# aloha20200628
我写代码时也想到了,这个问题应当从实际情况来考虑。通常来说像这种问题可以不考虑变量长度问题,关键词通常不会很多,如果真是成千上万个关键词,则需要考虑其它方案。如果只是三五个就无所谓效率问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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