Board logo

标题: [文件操作] [已解决]批处理根据txt中关键字查找并复制文件 [打印本页]

作者: gddsssko    时间: 2024-10-8 15:12     标题: [已解决]批处理根据txt中关键字查找并复制文件

txt中含有文件名关键词
abc123
abc456
...


要在指定目录下C:\MyFile中(包含所有子文件夹和子子文件夹...)  查找所有含有这些此关键词的rar文件   并复制到指定路径下C:\Test。
作者: hfxiang    时间: 2024-10-8 15:36

回复 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\"
复制代码

作者: hfxiang    时间: 2024-10-8 16:05

回复 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\"
复制代码

作者: gddsssko    时间: 2024-10-8 16:45

回复 3# hfxiang


    感谢大佬。
作者: qixiaobin0715    时间: 2024-10-9 09:18

关键词文本文件及批处理文件放在 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循环体。
作者: aloha20200628    时间: 2024-10-9 10:33

本帖最后由 aloha20200628 于 2024-10-9 10:40 编辑


各有看点》3楼代码采用逐行处理关键词,不限于关键词行数或总字符量,5楼代码受限于 'dir /b/s "..." "..." ...' 整个命令行长度,似乎系统限制命令行长度为8k字符量...

作者: qixiaobin0715    时间: 2024-10-9 10:40

本帖最后由 qixiaobin0715 于 2024-10-9 10:54 编辑

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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2