Рекурсивное копирование файлов изнутри директории во внешнюю с использованием командного файла
Существует такая структура каталогов:
Dir1
--Dir2
--File1
--File2
--Dir3
--File3
--File4
--File5
Теперь я хочу скопировать все файлы в подкаталоге (Dir2, Dir3) в родительский каталог Dir1, используя пакетные файлы. Я пришел с кодом ниже, но он не работает идеально. Я получаю вывод ниже -
Directory2 --It has 4 files all together
Invalid number of parameters
Invalid number of parameters
Does E:\Directory1\Copy\File1.dat specify a file name -- And only this file gets copied
or directory name on the target
(F = file, D = directory)?
Код -
@echo off
call :treeProcess
Pause
goto :eof
:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
for /D %%d in (*) do (
echo %%d
cd %%d
for %%f in (*) do xcopy %%f E:\Movies\Copy\%%f
call :treeProcess
cd ..
)
exit /b
1 ответ
Нет необходимости в пакетном файле. Выполните следующую команду из папки Dir1:
for /r /d %F in (*) do @copy /y "%F\*"
Как пакетный файл
@echo off
for /r /d %%F in (*) do copy /y "%%F\*"
НО - имейте в виду, что у вас может быть одно и то же имя файла в нескольких дочерних папках. Только один выживет в вашем Dir1.
РЕДАКТИРОВАТЬ
Выше предполагается, что вы запускаете команду (или сценарий) из папки Dir1. Его можно запустить из любого места, если скрипт дополнен путем включения пути к Dir1.
for /r "pathToDir1" /d %F in (*) do @copy /y "pathToDir1\%F\*"
или как пакетный файл
@echo off
set "root=pathToDir1"
for /r "%root%" /d %%F in (*) do copy /y "%root%\%%F\*"
Вы можете передать путь к Dir1 в качестве аргумента командного файла. Пройти в .
в качестве пути, если вы хотите использовать текущую папку.
@echo off
for /r %1 /d %%F in (*) do copy /y "%~1\%%F\*"