Board logo

标题: [文件操作] 批处理怎样搜索和移动文件? [打印本页]

作者: sdhaozao    时间: 2015-2-14 08:10     标题: 批处理怎样搜索和移动文件?

各位大神,批处里小白又出现了,这次请教的是关于文件匹配及复制的问题

在D盘根目录下分布着无数的PDF文件,散落在数个文件夹内,具体路径位置未知。文件名如下,红色部分是需要移动到一起的也是会发生变化的,不是所有的红色字体部分都是一致的。

18110-M108-100PAR005-D01-S02-1A0214-PG0007_18110_8977_Part1.pdf
18110-M108-100PAR005-D01-S02-1A0214-PG0007_18110_8977_Part3.pdf
18110-M108-100PAR005-D01-S02-1A0214-PG0007--01-FIT-UP REPORT.PDF
18110-M108-100PAR005-D01-S02-1A0214-PG0007--03-STRUCTURAL DIMENSIONAL INSPECTION REPORT BW.PDF

其中部分文件名是一致的,我们是否能建立一个批处理,将散落在不同文件夹内的文件根据文件名移动或者复制到一个文件内?

或者假设
D\AA\BB 文件夹下有
18110-M108-100PAR005-D01-S02-1A0214-PG0007--01-FIT-UP REPORT.PDF
18110-M108-100PAR005-D01-S02-1A0214-PG0007--03-STRUCTURAL DIMENSIONAL INSPECTION REPORT BW.PDF
两个文件

能否在D盘内搜索并复制
18110-M108-100PAR005-D01-S02-1A0214-PG0007_18110_8977_Part1.pdf
18110-M108-100PAR005-D01-S02-1A0214-PG0007_18110_8977_Part3.pdf
到D\AA\BB 文件夹下
作者: sdhaozao    时间: 2015-2-14 13:38

http://www.bathome.net/thread-12292-1-1.html

这个帖子里面有关键字可以使用,我需要移动的文件关键字会不停的发生变化,几千上万的数量,这样的情况下应该怎么设置关键字呢?
作者: pcl_test    时间: 2015-2-14 16:22

回复 1# sdhaozao

这样的问题描述看了根本无从入手!问题越复杂,描述要越详细,举例要恰当
作者: sdhaozao    时间: 2015-2-14 16:47

回复 3# pcl_test


就是这样的情况下
D:\test
│   100-1-1 Part1.pdf
│   200-2-1 Part.pdf   
     400-4-1 Part1.pdf
└─A
    │   100-1-1 fit up.pdf
    │   200-2-1 fit up.pdf      
    │  
    ├─BB
    │       300-3-1 fit up.pdf
    │       400-4-1 fit up.pdf
    └─CC
        └─CCC
                 500-5-1 fit up.pdf
将文件名部分相同的文件复制到制定文件夹D\AA\BB下
这里需要复制的就是红色的文件 (100-1-1/200-2-1/400-4-1开头的,当然文件名不是固定的,因为有成千上万)
作者: pcl_test    时间: 2015-2-14 17:55

本帖最后由 pcl_test 于 2015-2-14 18:00 编辑

回复 4# sdhaozao
  1. @echo off
  2. ::设置目标文件夹
  3. set "fdir=D:\AA\BB\"
  4. if not exist "%fdir%" md "%fdir%"
  5. ::指定搜索路径
  6. cd /d "D:\"
  7. for /f "delims=" %%a in ('dir /s/b *.pdf') do (
  8. >>temp.txt echo,%%~nxa。%%~dpa
  9. )
  10. for /f "tokens=1,2 delims=。" %%i in ('findstr /b "100-1-1 200-2-1 400-4-1" "temp.txt"') do (
  11. echo 复制 "%%j%%i" 到 "%fdir%"
  12. copy /y "%%j%%i" "%fdir%"
  13. echo.
  14. )
  15. del temp.txt /f /q
  16. pause
复制代码

作者: sdhaozao    时间: 2015-2-15 07:53

本帖最后由 sdhaozao 于 2015-2-15 07:54 编辑

回复 5# pcl_test

代码收到,非常感谢。能否将红色部分改成变量(比如设定取前7位字符?),因为会有100-1-1.101-1-1,206-1-1.......  562-1-1,658-1-1..............999-1-1, 无数文件。

for /f "tokens=1,2 delims=。" %%i in ('findstr /b "100-1-1 200-2-1 400-4-1" "temp.txt"') do (
作者: sdhaozao    时间: 2015-2-17 09:58

回复 6# sdhaozao


红色部分我添加了285个值显示
the command line is too long

能否直接调用一个txt文件里面包含着285个数值?
作者: DAIC    时间: 2015-2-17 11:03

回复 6# sdhaozao


    不能把“无数个文件”全部放到一条findstr命令里面
作者: DAIC    时间: 2015-2-17 11:04

回复 7# sdhaozao


可以把那几百个值放到文件里面,每行一个值,然后:
  1. findstr /g:list.txt temp.txt
复制代码





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