2017-01-21 3 views
0

вот мой код:пакетного файла для копирования только один из типов файлов для каждой вложенной папки в другую папку

xcopy "C:\Users\Me\Desktop\data\*.mtl" "C:\Users\Me\Desktop\mtl" /s /e 

Что она делает это скопировать все файлы типа файл .mtl из вложенных папок в папке данных, и скопируйте его в папку mtl на рабочем столе, одновременно сохраняя структуру папок.

Что хорошо, но моя цель - ограничить выбор файла для каждой вложенной папки только одним из файлов .mtl. Поэтому вместо копирования всех файлов .mtl в каждой подпапке он копирует один .mtl-файл для каждой подпапки.

Как это сделать?

+1

У вас должна быть идея, как выбрать «один» .mtl-файл. Новейший, самый старый, первый, последний, вообще. – LotPings

ответ

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 

xcopy /T /E "%sourcedir%\*.mtl" "%destdir%\" 
SET "source=:" 
FOR /f "delims=" %%a IN (
'xcopy /L /s "%sourcedir%\*.mtl" "%destdir%\" ' 
) DO (
CALL :chksubdir "%%a" 
) 

GOTO :EOF 

:chksubdir 
ECHO "%~1"|FIND "\">NUL 
IF ERRORLEVEL 1 GOTO :EOF 
IF /i "%source%"=="%~dp1" GOTO :EOF 
SET "source=%~dp1" 
CALL SET "sub=%%source:%sourcedir%=%%" 
COPY "%~1" "%destdir%%sub%%~nx1" >NUL 2>nul 
GOTO :eof 

Вам потребуется изменить настройки sourcedir и destdir в соответствии с вашими обстоятельствами.

Первым шагом является использование опции /txcopy для создания целевого поддерева.

Установив source в значение фиктивного типа, используя подпрограмму chksubdir для обработки каждой строки XCOPY /L /S для файлов. Это только список и на самом деле не делает копию.

Подпрограмма проверяет, содержит ли поставляемый параметр \, поскольку самая последняя строка xcopy /L - это счет-отчет. Если нет \, выйдите.

В противном случае сопоставьте source с приводом + путь к выбранному файлу. Если они не равны, то найден новый каталог, иначе пропустите этот файл.

Установить source в новое имя подкаталога, а затем установить sub на это полное имя минус относительный корень, указав строку подкаталога ниже относительного корня.

Строка все вместе для создания простой команды copy.

Смежные вопросы

 Смежные вопросы