Board logo

标题: [文件操作] 求助批处理将a文件夹内符合条件的文件复制到c文件夹,条件:清单内的文件名 [打印本页]

作者: G70    时间: 2021-7-5 17:54     标题: 求助批处理将a文件夹内符合条件的文件复制到c文件夹,条件:清单内的文件名

有一个A文件夹,内有很多文件,比如csv和pdf文件。
有一个B.csv清单,内有时间,分类,文件名等内容。
希望将A文件夹内的文件符合条件的文件复制到C文件夹。
条件:清单内有的文件名。
谢谢各位大佬!!!
作者: idwma    时间: 2021-7-5 18:07

本帖最后由 idwma 于 2021-7-5 18:21 编辑

@echo off&setlocal enabledelayedexpansion
set a=d:\a\
set b=d:\b.csv
set c=d:\c\
for /f "delims=" %%i in ('dir/b !a!') do (
(type !b! | find /i "%%i") && copy "!a!%%i" "!c!"
)
pause
作者: G70    时间: 2021-7-6 09:56

回复 2# idwma


6/23/2021,Wednesday,New Bitmap Image.bmp,9:00-18:00,8,200
The system cannot find the file specified.
6/24/2021,Thursday,New Microsoft Excel Worksheet.xlsx,9:00-18:00,8,200
The system cannot find the file specified.
6/25/2021,Friday,New Microsoft Publisher Document.pub,9:00-18:00,8,200
The system cannot find the file specified.
7/1/2021,Thursday,New Text Document (2).txt,9:00-18:00,8,200
The system cannot find the file specified.
7/2/2021,Friday,New Text Document.txt,9:00-18:00,8,200
The system cannot find the file specified.
Press any key to continue . . .

您好,运行之后是这样的,文件名是第三列的那个,只比较文件名。
作者: qixiaobin0715    时间: 2021-7-6 10:29

本帖最后由 qixiaobin0715 于 2021-7-6 16:57 编辑

回复 3# G70
  1. @echo off
  2. md C
  3. for /f "tokens=3 delims=," %%a in (b.csv) do if exist "A\%%a" (copy "A\%%a" "C\">nul) else echo,不存在文件:%%a
  4. pause
复制代码

作者: G70    时间: 2021-7-6 10:56

回复  G70
qixiaobin0715 发表于 2021-7-6 10:29



    您好,这个只创建了空的C文件夹,里面没有A文件夹里的文件
作者: qixiaobin0715    时间: 2021-7-6 11:16

bat/csv/其它文件要在同一个文件夹下,bat、清单文件b.csv要存为ANSI编码。
作者: G70    时间: 2021-7-6 15:04

回复 6# qixiaobin0715


    您好,如果需要A,B,C和bat都在同一个文件夹下要怎么实现呢?
作者: qixiaobin0715    时间: 2021-7-6 15:18

回复 7# G70
代码测试有无问题?
作者: G70    时间: 2021-7-6 15:29

回复 8# qixiaobin0715


    之前的测试代码可以在A文件夹内创建需要的文件,但是清单里没有的文件希望可以输出“不存在xxx文件”这句话。
作者: qixiaobin0715    时间: 2021-7-6 15:57

回复 9# G70
已修改,未测试,是这样吗?
作者: G70    时间: 2021-7-6 16:30

回复 10# qixiaobin0715


    A,B,C和bat在同一个文件夹下,但是没有输出“不存在文件”。
作者: qixiaobin0715    时间: 2021-7-6 17:01

回复 11# G70
我这里测试没问题,代码修改了一下,将复制信息屏蔽掉。窗口不显示不存在文件吗?
作者: G70    时间: 2021-7-6 17:12

回复 12# qixiaobin0715


    您好,可能是我的需求没有讲明白。比如,A文件夹里有1.pdf,2.word,3.txt,4.csv,但是b的清单里只有1.pdf和4.csv的数据,希望C文件夹里复制1.pdf和4.csv两个文件,窗口显示“没有找到文件2.word”,“没有找到文件3.txt”。谢谢您!!
作者: idwma    时间: 2021-7-6 19:07

本帖最后由 idwma 于 2021-7-6 19:15 编辑

@echo off&setlocal enabledelayedexpansion
set a=d:\a\
set b=d:\b.csv
set c=d:\c\
for /f "delims=" %%i in ('dir/b/s !a!') do (
find /i "%%~nxi" %b% >nul && copy "%%i" "!c!" >nul || set /p=""没有找到文件%%i"," <nul
)
pause
作者: qixiaobin0715    时间: 2021-7-6 20:30

本帖最后由 qixiaobin0715 于 2021-7-7 06:53 编辑

回复 13# G70
  1. @echo off
  2. md C
  3. for /f "tokens=3 delims=," %%a in (b.csv) do if exist "A\%%a" copy "A\%%a" "C\">nul
  4. echo,清单中没有列出的文件有:
  5. for %%i in (A\*) do if not exist "C\%%~nxi" echo,%%~nxi
  6. pause
复制代码

作者: G70    时间: 2021-7-7 15:26

回复 14# idwma


    您好,请问输出一句话之后要怎么自动换行呢
作者: G70    时间: 2021-7-7 15:26

回复 15# qixiaobin0715


    可以了!!谢谢您!!
作者: G70    时间: 2021-7-15 15:56

本帖最后由 G70 于 2021-7-15 16:05 编辑

回复 15# qixiaobin0715


    您好,如果把b文件改成xlsx文件的话,这个代码应该怎么修改呢
作者: qixiaobin0715    时间: 2021-7-15 16:08

回复 18# G70
批处理只能处理文本文件。只能求助其它程序了。
作者: G70    时间: 2021-7-15 16:11

回复 19# qixiaobin0715


    好的,谢谢!!
作者: G70    时间: 2021-7-15 16:28

回复 15# qixiaobin0715


    请问,如果要输出复制文件的个数应该怎么处理?
作者: qixiaobin0715    时间: 2021-7-15 16:48

回复 21# G70
  1. @echo off
  2. md C
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=3 delims=," %%a in (b.csv) do (
  5.     if exist "A\%%a" (
  6.         copy "A\%%a" "C\">nul
  7.         set /a n+=1
  8.     )
  9. )
  10. echo,共复制%n%个文件
  11. echo,清单中没有列出的文件有:
  12. for %%i in (A\*) do if not exist "C\%%~nxi" echo,%%~nxi
  13. pause
复制代码

作者: G70    时间: 2021-7-15 16:58

回复 22# qixiaobin0715


   您好   %n%没有输出结果   只输出了“共复制个文件”
作者: G70    时间: 2021-7-15 17:04

回复 22# qixiaobin0715


    解决了 谢谢您!
作者: qixiaobin0715    时间: 2021-7-15 17:08

那说明没有复制文件。你可把代码第6行中最后的>nul去掉再运行代码,看看到底复制文件没有。




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