1 (изменено: yandoxip, 2023-02-02 03:33:30)

Тема: CMD/BAT: Создание Бэкапа по разным папкам

Не получается написать код, чтобы каждые пару секунд создавался бэкап, но каждый раз в разную папку, и после 3ей папки всё записывалось поверх 1 папки, потом поверх 2ой и т.д.

xcopy /y /o /e "C:\Users\User\Documents\work\*.*" "C:\Users\User\Documents\backup\1\*.*"

2

Re: CMD/BAT: Создание Бэкапа по разным папкам

yandoxip, приветствую.

Насколько я понял, таким образом.
Время в секундах и кол-во папок бэкапа можно задавать в параметрах, по умолчанию: 2 секунды и 3 папки.
Крутится бесконечный цикл, в котором после ожидания 2 секунд исходная папка копируется в папки бэкапа: 1, 2, 3, 1, 2, 3, ...
Ключ /O команды xcopy у меня не работает (нет прав администратора).

@echo off & title %~nx0 & SetLocal EnableExtensions EnableDelayedExpansion

goto :Main
rem ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Help
  echo.Создание бэкапов каждые 2 с. в 3 папки.
  echo.Вызов: %~nx0 [Время = 2с.] [Колво_папок = 3]
  echo.
:PauseEnd
  pause
:End
  exit /b

rem ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Main

  rem Папки: исходная и бэкап.
  set "sFldWork=%USERPROFILE%\Documents\work"
  set "sFldBackup=%USERPROFILE%\Documents\backup"

  if "%~1"=="" (set /a nSec=2) else (set /a nSec="%~1")
  if "%~2"=="" (set /a nFld=3) else (set /a nFld="%~2")

  if !nSec! leq 0 goto :Help
  if !nFld! leq 0 goto :Help

rem Бесконечный цикл, выход по Ctrl-C.
:Loop

  rem Цикл перебора с 1 до nFld.
  for /l %%i in (1,1,!nFld!) do (
  
    rem Пауза в nSec с. (timeout доступна начиная с Windows Vista).
    timeout !nSec! /nobreak >nul

    echo."!sFldWork!\*.*" -^> "!sFldBackup!\%%i\*.*"

    xcopy "!sFldWork!\*.*" "!sFldBackup!\%%i\*.*" /e /h /k /r /y >nul
          rem /E Копирует все папки и подпапки, включая пустые.
          rem /H Копирует скрытые и системные файлы.
          rem /K Копирует атрибуты. Простая команда Xcopy сбрасывает атрибут "Только чтение".
          rem /O Копирует права владельца файлом и сведения таблицы управления доступом (ACL).
          rem /R Заменяет файлы, доступные только для чтения.
          rem /Y Подавляет запрос на подтверждение перезаписи существующего конечного файла.
  )
goto :Loop

EndLocal
exit /b