<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT: Резервное копирование с версионностью.]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=18212&amp;type=atom" />
	<updated>2024-06-01T21:29:43Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=18212</id>
		<entry>
			<title type="html"><![CDATA[CMD/BAT: Резервное копирование с версионностью.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=161045#p161045" />
			<content type="html"><![CDATA[<p>Доброго времени суток всем обитателям столь полезного ресурса, столкнулся с не простым вопросом (для меня, по крайней мере)</p><p>Суть такова:<br />Есть каталог на диске 1, есть каталог зеркала на диске 2, создаваемого с помощью BAT по средствам robocopy.<br />Хочу чтобы был дополнительный BAT который смотрит на каталог диска 1 сравнивая его с зеркалом каталога второго диска но поученный результат копировал в третий каталог своего рода версионность.<br />Суть идеи такова: с понедельника по пятницу работает пять BAT файлов для каждого дня недели, копирующих только те файлы которые были добавлены или изменены, в субботу же запускается основной BAT который очищает каталоги версий и делает новое зеркало.</p><p>Прежде чем создать топик я воспользовался поиском с запросом «robocopy» и «резервное копирование» просмотрев найденное нашел бизкое по теме, но не то что нужно.</p><p>На текущий момент мысли крутятся вокруг следующего кода:</p><div class="codebox"><pre><code>
@echo on
chcp 1251
setlocal enabledelayedexpansion

rem Параметры
set &quot;sourceDir=A:\$SUR&quot;
set &quot;targetDir=A:\$TARGT&quot;
set &quot;backupDir=A:\$CEL&quot;
set &quot;logFile=A:\$log\robocopy.log&quot;

rem Очистка лог-файла перед началом
echo. &gt; &quot;%logFile%&quot;

rem Запуск robocopy для сравнения каталогов и записи изменений в лог-файл
robocopy &quot;%sourceDir%&quot; &quot;%targetDir%&quot; /E /L /FP /NJH /NJS /NDL /NS /NC /XO /XX /LOG:&quot;%logFile%&quot;

rem Показать содержимое лог-файла для проверки
echo Содержимое лог-файла:
type &quot;%logFile%&quot;

rem Чтение лога и копирование измененных файлов
for /f &quot;tokens=*&quot; %%i in (&#039;type &quot;%logFile%&quot;&#039;) do (
    set &quot;line=%%i&quot;
    rem Удаление начальных пробелов
    set &quot;filePath=!line:~14!&quot;

    rem Проверка, что строка не пустая
    if not &quot;!filePath!&quot; == &quot;&quot; (
        echo Обработка файла: !filePath!

        rem Получение полного пути файла относительно исходного каталога
        set &quot;relativeFilePath=!filePath:%sourceDir%\=!&quot;

        rem Полный путь к файлу в целевом каталоге
        set &quot;backupFile=%backupDir%\!relativeFilePath!&quot;
        
        rem Директория файла в целевом каталоге
        set &quot;backupFileDir=!backupFile!&quot;
        for %%k in (&quot;!backupFileDir!&quot;) do set &quot;backupFileDir=%%~dpk&quot;
        
        if not exist &quot;!backupFileDir!&quot; (
            echo Создание каталога: &quot;!backupFileDir!&quot;
            mkdir &quot;!backupFileDir!&quot;
        )

        echo Копирование файла: &quot;%sourceDir%\!relativeFilePath!&quot; в &quot;!backupFileDir!&quot;
        robocopy &quot;%sourceDir%&quot; &quot;!backupFileDir!&quot; &quot;!relativeFilePath!&quot; /COPYALL /R:0 /W:0

        echo Команда robocopy завершена с кодом ошибки: %ERRORLEVEL%
    )
)

echo Копирование измененных файлов завершено.
endlocal
pause
</code></pre></div><p>Но к сожалению не могу понять почему он не работает.<br />Лог файл создается измененные файлы туда заносятся но копирования не происходит, возможно у кого-то есть более здравая мысль как это реализовать корректнее и надежнее…<br />Также необходимо учитывать что robocopy взят по причине присутствия длинных имен и каталогов.</p>]]></content>
			<author>
				<name><![CDATA[grisha.puding]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=43055</uri>
			</author>
			<updated>2024-06-01T21:29:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=161045#p161045</id>
		</entry>
</feed>
