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

[文件操作] 批处理怎样查询查询含有列表123.txt里面的关键字的xml文件并复制到固定的盘?

[复制链接]
发表于 2019-4-19 13:01:16 | 显示全部楼层 |阅读模式
求大神帮忙写一个批处理:查询查询含有列表123.txt里面的关键字的xml文件并复制到固定的路径,123.txt面保存的是240个序列号
发表于 2019-4-19 13:24:02 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%i in ('type "123.txt"') do (
  3.     for /f "delims=" %%j in ('findstr /m /c:"%%i" *.xml') do (
  4.         copy /y "%%j" "D:\固定的路径"
  5.     )
  6. )
复制代码
发表于 2019-4-19 14:05:03 | 显示全部楼层
  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. start mshta VBScript:Execute("msgbox(""%info%""):close")
  6. set "固定的路径=D:\123\test"
  7. set "文本=123.txt"
  8. if not exist "%固定的路径%" md "%固定的路径%"
  9. cd /d "%~dp0"
  10. powershell ^
  11.     $txtlines=@(gc '%文本%');^
  12.     dir *.xml^|?{$_ -is [System.IO.FileInfo]}^|%%{^
  13.         $xmltext=@(gc $_.FullName) -join "`r`n";^
  14.         for($i=0;$i -lt $txtlines.length;$i++){^
  15.             if($xmltext.Contains($txtlines[$i])){^
  16.                 cp -liter $_.FullName '%固定的路径%' -force;^
  17.                 write-host ('['+$txtlines[$i]+']'+$_.FullName+' --^> %固定的路径%');^
  18.                 break;^
  19.             };^
  20.         };^
  21.     }
  22. pause
复制代码
 楼主| 发表于 2019-4-19 14:17:02 | 显示全部楼层
回复 2# Batcher

大神你好,请问findstr /m /c:"%%i" *.xml这指的是从C盘搜索含有文本内列表的关键字的xml文件吗?另外我的123.txt文本里面的序列号需要排序标识吗?
我稍微修改了一下,但是无法运行,请指教。注:需要搜寻的文件在这个目录下D:\VHE LOG\,123.txt也在这个D:\VHE LOG\目录下

@echo off
for /f "delims=" %%i in ('type "123.txt"') do (
    for /f "delims=" %%j in ('findstr /m /d:"%%i" *.xml') do (
        copy /y "%%j" "D:\VHE LOG\BACKUP\"
    )
)
发表于 2019-4-19 14:55:18 | 显示全部楼层
回复 4# ICECREEN
  1. @echo off
  2. cd /d "D:\VHE LOG"
  3. for /f "delims=" %%i in ('type "123.txt"') do (
  4.     for /f "delims=" %%j in ('findstr /m /c:"%%i" *.xml') do (
  5.         copy /y "%%j" "D:\VHE LOG\BACKUP"
  6.     )
  7. )
复制代码
不要修改findstr命令后面的 /c:
它不是表示盘符
 楼主| 发表于 2019-4-19 16:29:10 | 显示全部楼层
回复 3# zaqmlp


    你的有病毒,你妹的,害我 ,我举报你
发表于 2019-4-19 16:45:18 | 显示全部楼层
回复 6# ICECREEN

嗯,来吧,举报我
发表于 2019-4-19 22:48:04 | 显示全部楼层
mshta 调用 vbscript 或 javascript 会被 Defender 误报,没有病毒。
 楼主| 发表于 2019-4-20 11:16:01 | 显示全部楼层
回复 8# WHY

我的电脑运行他的脚本后出现了感染性病毒,一直生成了很多垃圾文件,不仅仅是那个mshta而已
 楼主| 发表于 2019-4-20 11:22:26 | 显示全部楼层
回复 8# WHY


    你可以就这个问题帮忙给个建议吗,谢谢
 楼主| 发表于 2019-4-23 11:16:02 | 显示全部楼层
回复 5# Batcher


    您好,您给的代码执行不成功呢,是否因为我的TXT文本里面是按列排序的160个序列号太多了。我对你的代码的理解是,将文本123.txt的值赋值给%%I,然后在文件夹内循环查找带有%%I的关键字的xml文件赋值给%%J,最后将%%J copy到BACKUP文件夹内。
 楼主| 发表于 2019-4-23 11:45:21 | 显示全部楼层
回复 2# Batcher

您好,我稍微修改了下,现在已经可以运行,但是现在又面临一个新的问题,就是里面有很多重复的文件,只是时间不一样而已,可以删除重复多余的文件只留一个吗?

    @echo off
cd /d "D:\VHE LOG\"
for /f "tokens=*" %%i in ('type "123.txt"') do (
    for /f "delims=" %%j in ('dir /a-d /b /s ^| findstr "%%i"') do (
        copy "%%j" "D:\VHE LOG\BACKUP\"
    )
)
发表于 2019-4-23 14:23:10 | 显示全部楼层
回复 12# ICECREEN


copy /y "%%j" "D:\VHE LOG\BACKUP\"
试试这样可以吗?
 楼主| 发表于 2019-4-23 14:59:45 | 显示全部楼层
回复 13# Batcher


    试过了,不是完全重名的,不会覆盖。文件名后缀是日期,前缀一致时间不同视为重复,这种覆盖不了吧。列子:FtsRes_VHE-SFT1_ZSR515_20190409175643437_20194995643472.xml和FtsRes_VHE-SFT1_515_20190409181422428_201949101422492视为重复。这种请问怎么覆盖呢?有什么好的建议吗?
发表于 2019-4-23 16:50:17 | 显示全部楼层
回复 14# ICECREEN


    前缀是 FtsRes 还是 FtsRes_VHE-SFT1?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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