orphan

Скрипт CMD для архивирования файлов и папок

Было бы удобно при очередном передёргивании системы Windows не выполнять предварительную эвакуацию ценного, порой уникального контента, личных фото, документов, драйверов и т.д. из стандартных хранилищ системы. К таким относят представленные в левой панели элементы древовидной навигации: быстрые ссылки, пользовательские папки, дисковые устройства Windows 10 и так далее. Перед форматированием или удалением основного раздела в начале подготовки объемов для новой ОС, приходится каждый раз вспомнить о возможном наличии таких файлов, проверить и перености найденное в отдельное хранилище. Зачастую при единственном основном разделе, имевшимся в уходящей ОС и сложностях с интерфесами ввода/вывода конкретного ПК, можно действительно потратить лишнего внимания при поиске места под бэкапы. В тяжелых случаях даже может пригодится навык нарезки больших объемных файлов (обычно от 4 Гб) на мелкие кусочки. Часть обусловлена спецификой различий FAT32 / NTFS, часть наличием только тесных маленьких флешек на USB 2.0. Описанные ситуации критичны в тех случаях, когда физический диск с основным загрузочным разделом это и есть физический диск.

Достаточно простой алгоритм автоматического архивирования и копирования из стандартных директорий Виндовс, легко изменяемый на различные вариации, состоит из размеченным метками GOTO функциональных блоков, имеющих сервисное применение для валидации данных ввода и адекватного формирования LOOP-цикла. Начинается с объявления переменных, указания путей для поиска, типов искомого (расширений файлов), а также включения в системную переменную PATH путей расположения утилиты WinRAR и пути для сохранения резервной копий файлов.

На листинге ниже приведена сборка текстовой строки %act%, которая служит основным действией для командного интерпретатора CMD и приводит к выполнению указанных в данной строке директив архиватора rar.exe из стандартного набора архиватора WinRAR (проверяется стандартный путь).

SET ext=txt
SET rr=C:%HOMEPATH%\%DATE%_%ext%
SET rr=%rr%RAR.rar
SET act=rar a -r
SET act=%act% %rr%
SET act=%act% C:%HOMEPATH%\Downloads\*.%ext%
CLS
ECHO %act% 
CALL %act%

Результатом выполнения листинга будет готовая директива:


rar a -r C:\Users\superuser\03.03.2022_txtRAR.rar C:\Users\superuser\Downloads*.txt

Далее необходимо подобную директиву формировать и выполнять для каждого из требуемых типов контента. При этом предлагается усложнение алгоритма дополнительным условием, что под контентом подразумевается «тип содержимого», а не само расширение файла. Поэтому можно использовать наборы расширений, перечисленных через знак #, например gif#jpg в качестве параметра финального скрипта позволит сделать бэкап изображений в указанной папке, в том числе рекурсивно, в том чиле с возможность сохранения сруктуры вложенности каталогов и атрибутов создания файлов при необходимости.

Дело в том, что принимаемый параметр txt#rtf, например, будет разобран встроенной LOOP-функцией, которая будет считать знак # разделителем, а получившийся массив значений будет использован в качестве вводных данных для установки числа итераций по количеству расширений.

Пример ниже позволяет сохранить содержимое папки Donloads/Загрузки, которая по-умолчанию служит для хранения системой Windows тех файлов, которые загружены через браузер и не только. Корневой папкой для поиска подлежащего резервированию набора данных выбрана директория текущего пользователя. Её хранит переменная %HOMEPATH% в рассматриваемом семействе ОС от Майкрософт.

@echo off
SET PATH=%PATH%;%PROGRAMFILES(X86)%\WinRAR
if "%1" == "" goto error1

set _myvar="%1"

set downloads=%SystemDrive%%HOMEPATH%\Downloads\

:FORLOOP
For /F "tokens=1* delims=#" %%A IN (%_myvar%) DO (
  SET r=%%A
  SET rr=C:%HOMEPATH%\%DATE%_%r%
  SET rr=%rr%RAR.rar
  SET act=rar a -r
  SET act=%act% %rr%
  SET act=%act% C:%HOMEPATH%\Downloads\*.%r%
  CLS
  ECHO %act% 
  CALL %act%
  set _myvar="%%B"
  if NOT "%_myvar%"=="" goto FORLOOP
)

goto endofprogram
:error1
echo You must provide Argument with # separated

goto endofprogram
:endofprogram

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

В результате по указанному пути находился созданный RAR-архив с таким содержимым (опции архиватора — «рекурсивное добавление, сохранять структуру папок, файлы по маске txt,rtf»):

Результат работы скрипта для командной строки, который автоматизирует перенос содержимого прошлой Windows

Related posts