标题: [文件操作] [已解决]批处理如何根据列表文件查找并复制文件? [打印本页]
作者: tanrr 时间: 2018-8-5 18:40 标题: [已解决]批处理如何根据列表文件查找并复制文件?
本帖最后由 tanrr 于 2018-8-27 10:11 编辑
根据文本文件1.txt,该文件每行是一个文件名(不含扩展名),如下所示:
rink
bang
nine
hkjgkljkhkgj
jfkjgklhkglkjl
查找指定文件夹e:/2(一定要包括子文件夹)下匹配的文件(完全匹配,不区分大小写),如果找到:
1.将找到的文件复制到指定文件夹e:/3和d:/3
2.将找到的文件的文件名写入4.txt,格式为每行“文件名”+空格+“[sound:_文件名.扩展名]”,未找到的文件不写入,如下所示:
rink [sound:_rink.mp3]
bang [sound:_bang.mp3]
nine [sound:_nine.wav]
最后显示总查找条数,找到条数,未找到条数。
文本文件编码UTF-8。
请问如何才能实现?
作者: xczxczxcz 时间: 2018-8-12 13:55
没人回复?- @echo off & setlocal EnableDelayedExpansion
- cd.>4.txt
- for /f "delims=" %%a in ('dir/a-d/b/s "e:\2"') do (
- set /a total+=1
- findstr /i /x /c:"%%~na" "1.txt">nul 2>nul&&(
- set /a num+=1
- set/p=复制 %%~nxa 到 [e:\3]目录<nul & (copy /y "%%a" "e:\3\">nul 2>nul && echo 成功 || echo 失败)
- set/p=复制 %%~nxa 到 [d:\4]目录<nul & (copy /y "%%a" "d:\4\">nul 2>nul && echo 成功 || echo 失败)
- echo %%~na [sound:_%%~na%%~xa]>>4.txt
- ) || set /a number+=1)
-
- echo. & echo 总查找[%total%]条, 找到[%num%]条, 未找到[%number%]条。
- pause
复制代码
=============================================
作者: tanrr 时间: 2018-8-22 10:34
回复 2# xczxczxcz
果真是大神,一次就运行成功,非常感谢!
不过有个问题,因为源文件夹e:/2/里面有10万多个文件,导致查找速度极慢,看来查找这个方案是不行的。
不知以下这个直接复制的方案是否可行:
有一个文本文件1.txt,该文件每行是一个文件名(不含扩展名),如下所示:
rink
bang
nine
hkjgkljkhkgj
1.不查找,直接根据1.txt将相应文件复制到目标文件夹e:/3和d:/4,显示复制总数、成功、失败的数目。
2.将复制失败的文件以及复制总数、成功、失败的数目写入3.txt,复制成功的不用写入。
3.根据生成的目标文件夹e:/3,将文件列表写入4.txt,格式为每行“文件名”+空格+“[sound:_文件名.扩展名]”,如下所示:
rink [sound:_rink.wav]
bang [sound:_bang.wav]
nine [sound:_nine.wav]
作者: xczxczxcz 时间: 2018-8-22 15:11
回复 3# tanrr
文件夹嵌套太深,文件数量太多,文件容量又不大,十几万个小文件,就是用最简单的复制粘贴命令也不会很快。用批程式,总是要检索你的1.txt 和层层目录下的文件。偶是找不到更快的方法。就算以1.txt内的条目来检索目录也是花好多时间的。看VBS 和 powershell有没有好办法。
下面这个按 1.txt 内容依次查找 e:\2目录。偶用系统盘测试也不快。程式如下:- @echo off & setlocal EnableDelayedExpansion
- cd/d "%~dp0"
- pushd "%~dp0"
-
- for /f "delims=" %%a in ('type 1.txt') do (
- set "name="
- set /a total+=1
- for /f "delims=" %%e in ('dir/a-d/b/s "e:\2\%%a.*"') do (
- pushd "%%~dpe"
- if "%%~xe" neq "" if /i exist "%%~nxe" (
- set /a num+=1
- set "name=true"
- echo 复制 %%~nxe 到 [e:\3] && copy /y "%%~nxe" "e:\3">nul 2>&1
- echo 复制 %%~nxe 到 [d:\4] && copy /y "%%~nxe" "d:\4">nul 2>&1
- echo %%~ne [sound:_%%~nxe]>>"%~dp04.txt")
- popd
- )
- if not defined name set /a number+=1
- )
-
- echo. & echo 总查找[%total%]条, 找到[%num%]条, 未找到[%number%]条。
- pause
复制代码
作者: Batcher 时间: 2018-8-22 19:00
回复 3# tanrr
如果不想查找,那就需要在1.txt里面列出文件的完成路径和文件名,否则代码不知道从哪里复制文件。
作者: tanrr 时间: 2018-8-23 17:02
回复 4# xczxczxcz
厉害了!运行速度飞快,而且资源占用小,非常感谢!
作者: tanrr 时间: 2018-8-23 17:03
回复 5# Batcher
已用4楼代码完美解决,谢谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |