Board logo

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

作者: ICECREEN    时间: 2019-4-19 13:01     标题: 批处理怎样查询查询含有列表123.txt里面的关键字的xml文件并复制到固定的盘?

求大神帮忙写一个批处理:查询查询含有列表123.txt里面的关键字的xml文件并复制到固定的路径,123.txt面保存的是240个序列号
作者: Batcher    时间: 2019-4-19 13:24

  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. )
复制代码

作者: zaqmlp    时间: 2019-4-19 14:05

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

作者: ICECREEN    时间: 2019-4-19 14:17

回复 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\"
    )
)
作者: Batcher    时间: 2019-4-19 14:55

回复 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:
它不是表示盘符
作者: ICECREEN    时间: 2019-4-19 16:29

回复 3# zaqmlp


    你的有病毒,你妹的,害我 ,我举报你
作者: zaqmlp    时间: 2019-4-19 16:45

回复 6# ICECREEN

嗯,来吧,举报我
作者: WHY    时间: 2019-4-19 22:48

mshta 调用 vbscript 或 javascript 会被 Defender 误报,没有病毒。
作者: ICECREEN    时间: 2019-4-20 11:16

回复 8# WHY

我的电脑运行他的脚本后出现了感染性病毒,一直生成了很多垃圾文件,不仅仅是那个mshta而已
作者: ICECREEN    时间: 2019-4-20 11:22

回复 8# WHY


    你可以就这个问题帮忙给个建议吗,谢谢
作者: ICECREEN    时间: 2019-4-23 11:16

回复 5# Batcher


    您好,您给的代码执行不成功呢,是否因为我的TXT文本里面是按列排序的160个序列号太多了。我对你的代码的理解是,将文本123.txt的值赋值给%%I,然后在文件夹内循环查找带有%%I的关键字的xml文件赋值给%%J,最后将%%J copy到BACKUP文件夹内。
作者: ICECREEN    时间: 2019-4-23 11:45

回复 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\"
    )
)
作者: Batcher    时间: 2019-4-23 14:23

回复 12# ICECREEN


copy /y "%%j" "D:\VHE LOG\BACKUP\"
试试这样可以吗?
作者: ICECREEN    时间: 2019-4-23 14:59

回复 13# Batcher


    试过了,不是完全重名的,不会覆盖。文件名后缀是日期,前缀一致时间不同视为重复,这种覆盖不了吧。列子:FtsRes_VHE-SFT1_ZSR515_20190409175643437_20194995643472.xml和FtsRes_VHE-SFT1_515_20190409181422428_201949101422492视为重复。这种请问怎么覆盖呢?有什么好的建议吗?
作者: Batcher    时间: 2019-4-23 16:50

回复 14# ICECREEN


    前缀是 FtsRes 还是 FtsRes_VHE-SFT1?
作者: ICECREEN    时间: 2019-4-23 18:48

回复 15# Batcher


    除去20190409175643437_20194995643472前面的都算前缀,前缀一致视为重复
作者: Batcher    时间: 2019-4-23 20:11

回复 16# ICECREEN


FtsRes_VHE-SFT1_ZSR515_20190409175643437_20194995643472.xml
FtsRes_VHE-SFT1_515_20190409181422428_201949101422492
你14楼给的这个例子是不是写错了,这种情况认为是重复还是不重复?
作者: ICECREEN    时间: 2019-4-24 13:27

回复 17# Batcher


    不好意思,漏写了,这种视为不重复。FtsRes_VHE-SFT1_ZSR515_20190409175643437_20194995643473.xml和FtsRes_VHE-SFT1_ZSR515_20190409175653537_20194995653573.xml视为重复
作者: Batcher    时间: 2019-4-24 13:53

回复 18# ICECREEN
  1. @echo off
  2. cd /d "D:\VHE LOG\"
  3. for /f "tokens=*" %%i in ('type "123.txt"') do (
  4.     for /f "delims=" %%j in ('dir /a-d /b /s ^| findstr "%%i"') do (
  5.         for /f "tokens=1-3 delims=_" %%a in ("%%j") do (
  6.             if not defined %%a_%%b_%%c (
  7.                 copy /y "%%j" "D:\VHE LOG\BACKUP\"
  8.                 set %%a_%%b_%%c=1
  9.             )
  10.         )
  11.     )
  12. )
复制代码

作者: ICECREEN    时间: 2019-4-26 13:01

回复 19# Batcher


    Thanks,大神




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