Пример копирования папки шаблонов по разным пользователям Суши Сет

 

Задача скопировать папки SCHET и ZAKAZ с файлами шаблонов для печати по пути C:\JP\JUPITER\PROJECT\*USERNAME*\Admin\rpt\unikassa, где *USERNAME* - папка с именем пользователя. Делать это вручную слишком долго - пользователей может быть больше сотни, поэтому самый лучший вариант это использовать bat-файл, содержащий, как пример, следующий код:

 

@chcp 1251
@echo on


cd /d %~dp0


SET FILELIST=%CD%\filelist


If Exist %FILELIST% (
  For /F "Delims=" %%A In (%FILELIST%) Do (
echo %%~A
rename c:\JP\JUPITER\PROJECT\%%~A\Admin\rpt\unikassa\SCHET SCHET_backup_%DATE%
xcopy %CD%\SCHET c:\JP\JUPITER\PROJECT\%%~A\Admin\rpt\unikassa\SCHET /E /I
rename c:\JP\JUPITER\PROJECT\%%~A\Admin\rpt\unikassa\ZAKAZ ZAKAZ_backup_%DATE%
xcopy %CD%\ZAKAZ c:\JP\JUPITER\PROJECT\%%~A\Admin\rpt\unikassa\ZAKAZ /E /I
  )
)
pause

Какая команда за что отвечает

@chcp 1251 - меняет используемую кодировку на кириллицу. Если имя пользователя на кириллице, без этой команды символы будут искажены, что приведет к ошибке, и папки с файлами скопированы не будут.

@echo on - включает режим отображения вводимых команд и сообщений на экране.

cd /d %~dp0 - меняет каталог исполнения на текущий каталог, в котором находится сам bat, т.к. рядом с ним как раз находятся две папки, которые нужно скопировать. Благодаря данной команде, запускать bat можно из любого места на сервере (папки SCHET, ZAKAZ и copy.bat должны находиться в одном месте).

SET FILELIST=%CD%\filelistобъявляет переменную FILELIST, которая ссылается на строки в одноименном файле filelist (он тоже должен быть вместе с copy.bat и папками в одной директории). В этом файле будет список папок (имен пользователей, построчно), по которым будет идти копирование.

If Exist %FILELIST% - проверяет на наличие файла filelist. Если он отсутствует, в окне появится информация об этом.

For /F "Delims=" %%A In (%FILELIST%) Do - запускает цикл подстановки папок (имен пользователей) для создания путей, по которым будет идти копирование.

echo %%~A - выводит в окне лога по какому имени пользователя (папке) идет копирование в данный момент.

rename c:\JP\JUPITER\PROJECT\%%~A\Admin\rpt\unikassa\SCHET SCHET_backup_%DATE% - переименовывает уже имеющиеся папки с шаблонами для печати с добавлением текущей даты в конце (создает бэкап). Т.е. папка будет иметь примерно такой вид: SCHET_backup_30.04.24

xcopy %CD%\SCHET c:\JP\JUPITER\PROJECT\%%~A\Admin\rpt\unikassa\SCHET /E /I - копирует нашу новую папку из задания по пути c:\JP\JUPITER\PROJECT\*USERNAME*\Admin\rpt\unikassa\SCHET.

Флаг /E - Копирование каталогов с подкаталогами, включая пустые.

Флаг /I - Если целевой объект не существует и копируется несколько файлов, считается, что целевой объект задает каталог. Используем, поскольку целевого объекта уже не существует (старая папка SCHET переименована предыдущей командой в SCHET_backup_30.04.24).

Следующие две команды полностью идентичны, но для папки ZAKAZ.

pause - оставляет открытым окно по завершению копирования, чтобы можно было прочитать лог об успешных или неудачных попытках копирования/переименования.


Порядок действий

1. Заходим на необходимый сервер, копируем все наши файлы (copy.bat, filelist, SCHET и ZAKAZ) в любое место (например, на рабочий стол).

2. Заходим в Total Commander по пути c:\JP\JUPITER\PROJECT\ и выделяем все необходимые папки с именами пользователей, сверху нажимаем "Выделение" -> "Копировать имена файлов в буфер"

xnview_hMZ3JaTZ8K.png

3. Открываем filelist в любом удобном редакторе. Вставляем из буфера скопированные имена папок и видим, что все они имеют на конце символ "\"

notepad++_t5ELXI7Wm2.png

Избавляемся от безобразия нажатием Ctrl+H. В открывшемся окне в поле "Найти" вводим без кавычек "\", поле "Заменить на:" должно быть пустым. Скорее всего курсор будет в самом низу списка, в таком случае отмечаем галочку на "Обратное направление поиска". Жмем на кнопку "Заменить все"

notepad++_bmrneBoHdb.png

Убеждаемся, что никаких лишних символов нет, только названия папок. Сохраняем.

4. Запускаем copy.bat.

 

Возможные проблемы

Могут возникнуть ошибки в процессе переименования старых папок SCHET или ZAKAZ, т.к. один из файлов внутри них может быть использован в данный момент (в процессе обращения к нему при печати чеков на торговой точке). В окне лога лучше всего проверить все ли скопировано удачно. Если были ошибки, необходимо посмотреть на каких именно пользователях. Чтобы исправить, достаточно оставить их в filelist, удалив из списка все остальные (удачно скопированные). Запустить copy.bat повторно. 

 

 

 

 

 


Система JUPITER                                 www.jupiter.systems                                 (с) 2024г.