Как скопировать файлы из подпапки только с помощью cmd? - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть структура папок, такая как:

-MainDir
  -f0
   -f0
    -f0
     -a.txt
     -b.txt
     -c.txt
  -f1
   -f1
    -f1
     -aa.txt
     -bb.txt
     -cc.txt

Если вы видите выше, мои файлы находятся в третьей папке с точки зрения иерархии. Теперь мое требование - иметь возможность копировать только основную папку и ее файлы в другое место. Например: выходные данные для вышеуказанной структуры должны быть следующими:

-MainDir
   -f0
    -a.txt
    -b.txt
    -c.txt
   -f1
    -aa.txt
    -bb.txt
    -cc.txt

, но когда я пытаюсь использовать XCOPY, все папки копируются как есть. Поэтому я пытаюсь найти способ достижения структуры целевой папки, как показано выше

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Это довольно простая задача с использованием xcopy вместе с for /D loop , учитывая, что три подкаталога в каждой ветви иерархии имеют одинаковые имена (например, f0\f0\f0 и f1\f1\f1):

rem // Loop through immediate sub-sirectories of main directory:
for /D %%I in ("D:\MainDir\*") do (
    rem /* Build path to files into second sub-directory (though there are no files);
    rem    the third sub-directory and its contents is regarded due to the `/S` option;
    rem    the copy destination directory then receives the whole contents of the
    rem    second source sub-directory, including the third source sub-directory: */
    xcopy /S /I "%%~I\%%~nxI\*.*" "D:\CopyDir"
)
1 голос
/ 30 сентября 2019

Следующая команда зациклит каталоги под main, найдет все файлы и поместит их все в самый верхний подкаталог в месте назначения, как вам нужно:

CMD Script:

@(SETLOCAL
  ECHO OFF
  SET "_MainDir=C:\Main\Dir"
  SET "_DestDir=%Temp%\Destination\Main\Dir"
)

FOR /D %%A in (
  %_MainDir%\*
) DO (
  IF NOT EXIST "%_DestDir%\%%~nxA" MD "%_DestDir%\%%~nxA"
  FOR /F %%a IN ('
    DIR /A-D /S /B "%%~fA\*"
  ') DO (
    ECHO Copying: "%%~fa"
    ECHO To: "%_DestDir%\%%~nxA\%%~nxa"
    COPY /B /V /Y "%%~fa" "%_DestDir%\%%~nxA\%%~nxa"
  )
)
...