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

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

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


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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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

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

TOP

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


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

TOP

关键词文本文件及批处理文件放在 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循环体。

TOP

回复 3# hfxiang


    感谢大佬。

TOP

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

评分人数

TOP

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

TOP

返回列表