将一组特定文件从目录复制到另一个目录,同时保留文件夹结构

时间:2014-04-22 14:09:46

标签: windows batch-file xcopy robocopy

我有一个如下所示的目录:

\isa\documents\2004\2008\jac\file1.txt
\isa\documents\2004\jan\file1.txt
\isa\scannedDocs\2004\2009\jan\file2.pdf
\isa\documents\2005\2008\jac\file1.txt
\isa\documents\2003\jan\file1.txt
\isa\scannedDocs\2002\2009\jan\file2.pdf

我有一个我需要复制的文件列表(从数据库导出),但因为我不需要目录中的每个文件,我只想要从我的列表中复制的文件:

文件-needed.txt:

\isa\documents\2004\2008\jac\file1.txt
\isa\documents\2004\jan\file1.txt
\isa\documents\2004\jac\file3.txt
\isa\documents\2003\jan\file1.txt

基本上:

  1. 我需要复制出所需的特定文件,
  2. 无法找到文件时记录,
  3. 我需要保留文件夹结构,因为文件可能具有相同的名称,只是在不同的目录中。
  4. 它在Windows 7机器上,我可以运行PowerShell和批处理文件。我尝试了robocopy和xcopy,并且获得了所有目录,没有文件或所有文件,也没有目录......

    任何帮助都会很棒。

    编辑:

    好的,所以我尝试过Robocopy,但它要么是复制目录而没有文件或文件而没有目录。我还没有在powershell中尝试过任何东西,但这可能就是这样......

    这是Windows,我可能刚刚在上面错误地写了斜杠,我在两个环境之间工作,并且只是试图解释问题。

    我尝试的事情:

    @echo off
    set src_folder="C:\batchScripting\TEST_DIR\"
    set dst_folder="C:\batchScripting\COPY2_DIR\"
    robocopy "C:\batchScripting\TEST_DIR" "C:\batchScripting\COPY2_DIR" FileList.txt /S /V /NP /LOG:"log.log" /R:10 /W:30 
    

     @echo off
     set src_folder=C:\batchScripting\TEST_DIR\
     set dst_folder=C:\batchScripting\COPY2_DIR\
     for /f "tokens=*" %%i in (File-list.txt) DO xcopy /s /i "%src_folder%\%%i" "%dst_folder%"
    

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (q23221996.txt) DO (
 IF EXIST "%sourcedir%%%a" (ECHO f|xcopy /y "%sourcedir%%%a" "%destdir%%%a" 2>NUL >nul
 ) ELSE (ECHO "%sourcedir%%%a" does NOT exist)
)

GOTO :EOF

我使用了一个名为q23221996.txt的文件,其中包含我的测试数据。 sourcedirdestdir都设置为适合我的系统。

如果目标文件已存在,xcopy命令上的/ y会强制覆盖。