[CMD] Поиск и копирование файлов.

Alex1983

Разработчик
Сообщения
1,343
Реакции
500
Привет всем.
Не поможете написать батфайл, который выполняет следующее (постараюсь обьяснить на примере).
Имеетка директория Original в которй есть файлы со вложенными каталогами. Есть директория Test. Вот надо проверить есть ли в дидектории Test файл из директории Original, если есть, то перенести/копировать в директорию Temp., соблюдая вложенность каталогов. Если файла нет, то пропустить.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,716
Реакции
6,208
Вот надо проверить есть ли в дидектории Test файл из директории Original, если есть, то перенести/копировать в директорию Temp
Так перенести или скопировать и откуда, из Test или из Original ?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,716
Реакции
6,208
CMD/BATCH:
@echo off
SetLocal EnableExtensions

set "this.path=%~DP0"
set "this.path=%this.path:~0,-1%"

:: папка-источник
set orig=%this.path%\Original

:: папка сверки
set test=%this.path%\Test

:: папка назначения
set dest=%this.path%\Temp


call :strlen szOrig orig
set /a szOrig+=1

for /f "delims=" %%a in ('dir /b /s /a-d "%orig%\*"') do call :cp "%%~fa"

pause
goto :eof

:cp
  set "rel=%~1"
  SetLocal EnableDelayedExpansion
  call set "rel=!rel:~%szOrig%!"
  SetLocal DisableDelayedExpansion
  if exist "%test%\%rel%" (echo F|>NUL xcopy /C /H /R /Y "%test%\%rel%" "%dest%\%rel%" && echo Copy: "%rel%")
  endlocal
  endlocal
exit /b

:: by @jeb
:strlen <resultVar> <stringVar>
(  
    setlocal EnableDelayedExpansion
    (set^ tmp=!%~2!)
    if defined tmp (
        set "len=1"
        for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
            if "!tmp:~%%P,1!" NEQ "" (
                set /a "len+=%%P"
                set "tmp=!tmp:~%%P!"
            )
        )
    ) ELSE (
        set len=0
    )
)
(
    endlocal
    set "%~1=%len%"
    exit /b
)
 
Последнее редактирование:
Сверху Снизу