Board logo

标题: [文件操作] 批处理如何根据txt文本列出的文件名批量查找指定文件夹里的文件并复制到新的文件夹 [打印本页]

作者: vuonge    时间: 2017-2-8 12:22     标题: 批处理如何根据txt文本列出的文件名批量查找指定文件夹里的文件并复制到新的文件夹

本帖最后由 pcl_test 于 2017-5-2 12:41 编辑

请帮忙:批处理如何批量查找文件夹并复制到指定文件夹
问题描述
1、D:\文件夹1(含有子文件夹)
2、需要查找的文件名字列表已经存储在1.txt文档中了。
3、按1.txt文档中文件名字列表批量查找文件,并复制到d:\文件夹2中。
4、如果1.txt文档中某个文件没有在D:\文件夹1(含有子文件夹)中找到,将文件名复制到另2.txt

请教该怎么写?
作者: 老刘1号    时间: 2017-2-8 13:07

FOR+FORFILES搞定
想代写请左转有偿区或联系我。
作者: taofan712    时间: 2017-2-10 12:00

  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do (
  3. for /f "delims=" %%i in ('dir /a-d /s /b "D:\文件夹1\%%a"') do (
  4. if "%%i"=="找不到文件" (
  5. echo;%%a>>2.txt
  6. set n+=1
  7. ) else (
  8. copy /y "%%~fi" D:\文件夹2\
  9. set m+=1
  10. )
  11. )
  12. )
  13. echo;找到%m%个,有%n%个没找到
  14. pause>nul
复制代码
新手作业
作者: 45894365    时间: 2017-5-2 11:52

回复 3# taofan712


    按照您的做法,文件是能找到,但找不到的文件没有显示到2.txt里哦,请大神再帮帮忙,谢谢!
作者: 45894365    时间: 2017-5-2 15:25

楼主的第4点三楼貌似不能实现,请再帮帮忙~
作者: taofan712    时间: 2017-5-2 15:54

本帖最后由 taofan712 于 2017-5-2 16:03 编辑
  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do (
  3.     for /f "delims=" %%i in ('dir /a-d /s /b "D:\文件夹1\%%a"^|^|echo;%%a^>^>2.txt') do copy /y "%%~fi" D:\文件夹2\
  4. )
  5. pause>nul
复制代码

作者: nidnil    时间: 2017-5-2 15:58

@echo off
call :t D:\1.txt D:\文件夹1 D:\文件夹2 D:\2.txt

goto :eof
:t
    for /f "usebackq delims=" %%a in (%1) do (
        for /r "%~f2" %%b in (
            "%%~nxa"
        ) do copy "%%~b" %3
        if not exist "%~3\%%~nxa" echo %%a >> %4
    )
    goto :eof
作者: 45894365    时间: 2017-5-2 16:15

回复 7# nidnil


    完美成功了,感谢大神帮忙!!!好人一生平安。
作者: 45894365    时间: 2017-5-2 16:18

回复 6# taofan712


    感谢大哥,成功了,好人一生平安!
作者: pcl_test    时间: 2017-5-2 21:06

本帖最后由 pcl_test 于 2017-5-3 02:39 编辑
  1. @echo off
  2. powershell ^
  3.     $fileList='1.txt';^
  4.     $notExists='2.txt';^
  5.     $srcFolder='D:\文件夹1\';^
  6.     $desFolder='D:\文件夹2\4567';^
  7.     $m=@{};$s='';^
  8.     if(-not (Test-Path -Literal $desFolder)){md $desFolder^|out-null};^
  9.     gc $fileList^|?{$_ -notmatch '^^\s*$'}^|%%{if(!$m[$_.trim().ToLower()]){$m[$_.trim().ToLower()]=1;}};^
  10.     dir -Literal $srcFolder -r^|?{$_ -is [System.IO.FileInfo]}^|%%{^
  11.         $tmp=$_.Name.ToLower();^
  12.         if($m[$tmp]){^
  13.             if($m[$tmp] -le 1){^
  14.                 cp -Literal $_.FullName $desFolder -Force;^
  15.             }else{^
  16.                  ^<#处理同名文件#^>^
  17.                 $newname=$_.BaseName+'_('+($m[$tmp]-1)+')'+$_.Extension;^
  18.                 cp -Literal $_.FullName (Join-Path $desFolder $newname) -Force;^
  19.             };^
  20.             $m[$tmp]+=1;^
  21.     };};^
  22.     foreach($a in $m.keys){if($m[$a] -eq 1){$s+=$a+\"`r`n\";}};^
  23.     if($s){Set-Content $notExists -value $s}
  24. pause
复制代码

作者: libin1n    时间: 2018-4-2 18:00

请教大神:批处理如何批量查找文件夹并复制到指定文件夹
问题描述
1、D:\文件夹1(含有子文件夹)
2、需要查找的文件夹名字列表已经存储在1.txt文档中了。
3、按1.txt文档中文件夹名字列表批量查找文件夹,并复制到d:\文件夹2中。
4、如果1.txt文档中某个文件没有在D:\文件夹1(含有子文件夹)中找到,将文件名复制到另2.txt

请教该怎么写?按照上面代码复制的单独文件,现在需要复制文件夹
作者: wudidi    时间: 2020-2-25 15:11

回复 11# libin1n


    @echo off
for /f "tokens=*" %%a in (1.txt) do (
  if exist D:\文件夹1\%%a" (
    xcopy  D:\文件夹1\%%a" "D:\文件夹2\%%a" /Y /E /I /Q
  )
)
pause




这个是复制过去了  ,查找不到的没有列举出来




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