Board logo

标题: [文件操作] [已解决]批处理怎样在多个文件夹中有选择地批量复制指定文件? [打印本页]

作者: cyucyu    时间: 2010-3-13 23:50     标题: [已解决]批处理怎样在多个文件夹中有选择地批量复制指定文件?

在 D:\EmpireServer\web\flash 目录下:
有a文件夹和b文件夹,还有文件1.txt 它里面记录了两行数据,分别是 1.swf和2.swf
a文件夹里面有1.swf b.swf m.swf 等等很多个文件,b文件夹里面有2.swf 6.swf m888.swf 等等很多个文件,

现在我想用批处理把1.txt中所记录的1.swf和2.swf 从ab这两个文件夹里面复制到E:/images 下里面,并且要自动建立a文件夹和b文件夹,并复制1.swf和2.swf到对应的文件夹。

还有一个说明的是a和b文件夹这两个名字只是举例,实际应用中要随机变化。


下面是我正在使用的批量处理代码,但它不够智能,没能达到我上面所说的效果。
  1. @echo off
  2. for /f "tokens=*" %%a in (1.txt) do (
  3. for /f "tokens=*" %%i in ('dir /s/b/a-d %%a') do (
  4. copy "%%~dpnxi" 1
  5. )
  6. )
复制代码

[ 本帖最后由 cyucyu 于 2010-3-14 21:30 编辑 ]
作者: test2010    时间: 2010-3-14 11:09

  1. @echo off
  2. set NameList="1.swf" "2.swf"
  3. set Source="D:\EmpireServer\web\flash"
  4. set Dest="E:\images"
  5. cd /d %Source%
  6. for /f "delims=" %%f in ('dir /a:-d /s /b %NameList%') do (
  7.     for %%u in ("%%f\..") do (
  8.         md %Dest%\"%%~nxu" 2>nul
  9.         copy "%%f" %Dest%\"%%~nxu"
  10.     )
  11. )
  12. pause
复制代码

[ 本帖最后由 test2010 于 2010-3-14 11:11 编辑 ]
作者: cyucyu    时间: 2010-3-14 14:00

楼上的大哥你好!
set NameList="1.swf" "2.swf"
因为这这两个文件只是举例,实际应用中有很多个文件,文件名都记录在1.txt这个文件里面。
能不能直接读取1.txt里面的文件名呀。
麻烦你指教一下。
作者: BatCoder    时间: 2010-3-14 15:31

  1. @echo off
  2. set "Source=D:\EmpireServer\web\flash"
  3. set "Dest=E:\images"
  4. cd /d "%Source%"
  5. for /f "delims=" %%a in (1.txt) do (
  6.     for /f "delims=" %%f in ('dir /a-d /s /b "%%a"') do (
  7.         for %%u in ("%%f\..") do (
  8.             md "%Dest%\%%~nxu" 2>nul
  9.             copy "%%f" "%Dest%\%%~nxu"
  10.         )
  11.     )
  12. )
复制代码

作者: cyucyu    时间: 2010-3-14 17:32

谢谢两位大哥。特别谢谢  BatCoder 大哥。你写的很好用。

但还有一点点小问题。
比如在 D:\EmpireServer\web\flash\minjie 这个目录下有A和B两个子目录。
复制到E:\images这里的时候目录结构就变了。

如果复制到E盘后目录结构是E:\images\minjie\a和E:\images\minjie\b的话,这样就完美了。

现在复制后的结果是E:\images\a和E:\images\b

现在我想要的是和D:\EmpireServer\web\flash\下目录结构保持一致,不管它的目录和子目录有几个。
作者: BatCoder    时间: 2010-3-14 19:46

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "Source=D:\EmpireServer\web\flash"
  4. set "Dest=E:\images"
  5. cd /d "%Source%"
  6. for /f "delims=" %%a in (1.txt) do (
  7.     for /f "delims=" %%f in ('dir /a-d /s /b "%%a"') do (
  8.         set "str=%%~dpf"
  9.         set "folder=!str:%Source%=!"
  10.         md "%Dest%!folder!%%~nxu" 2>nul
  11.         copy "%%f" "%Dest%!folder!%%~nxu"
  12.     )
  13. )
复制代码

作者: cyucyu    时间: 2010-3-14 21:26

谢谢  BatCoder 大哥。非常感谢您。

终于可以完美解决了一直困扰我的问题。
作者: chqi2000    时间: 2010-7-15 11:07     标题: 我按照这个批处理的结果有几个目录,请高手解答一下!

我按照这个程序运行后,怎么出现了两个文件夹
一个文件夹是我需要的
还有一个文件夹下面有多个子目录,每个子目录还有重复的文件




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