Пример копирования папки шаблонов по разным пользователям Суши Сет
Задача скопировать папки 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\ и выделяем все необходимые папки с именами пользователей, сверху нажимаем "Выделение" -> "Копировать имена файлов в буфер".
3. Открываем filelist в любом удобном редакторе. Вставляем из буфера скопированные имена папок и видим, что все они имеют на конце символ "\".
Избавляемся от безобразия нажатием Ctrl+H. В открывшемся окне в поле "Найти" вводим без кавычек "\", поле "Заменить на:" должно быть пустым. Скорее всего курсор будет в самом низу списка, в таком случае отмечаем галочку на "Обратное направление поиска". Жмем на кнопку "Заменить все".
Убеждаемся, что никаких лишних символов нет, только названия папок. Сохраняем.
4. Запускаем copy.bat.
Возможные проблемы
Могут возникнуть ошибки в процессе переименования старых папок SCHET или ZAKAZ, т.к. один из файлов внутри них может быть использован в данный момент (в процессе обращения к нему при печати чеков на торговой точке). В окне лога лучше всего проверить все ли скопировано удачно. Если были ошибки, необходимо посмотреть на каких именно пользователях. Чтобы исправить, достаточно оставить их в filelist, удалив из списка все остальные (удачно скопированные). Запустить copy.bat повторно.
Система JUPITER www.jupiter.systems (с) 2024г.
1 комментарий
Статья крутая) Рекомендую попробовать chatgpt для написания статей, экономия времени)