Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Архивирование, переименование и перемещение файлов с помощью BAT-файла

Ответить
Настройки темы
CMD/BAT - Архивирование, переименование и перемещение файлов с помощью BAT-файла

Пользователь


Сообщения: 136
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: kirillius
Дата: 28-08-2015
Здравствуйте.

Помогите, пожалуйста, с написанием скрипта для следующей задачи:
Необходимо с помощью BAT-файла создать архив заданной папки, при необходимости переименовать полученный архив, затем скопировать полученный архив в другие две папки, и после копирования удалить из первоначальной папки все файлы.

Например:
На диске C есть папка "Archive", в этой папке время от времени будут появляться папки типа "Иванов И.И. Отправка".
Необходимо создать zip-архив этой папки, и если в её имени нет нужных пробелов, то переименовать архив так, чтобы получилось, например, "Иванов И. И. Отправка.zip" (то есть пробел после каждого инициала).
Если в папке есть две папки (или больше), например, "Иванов И.И. Отправка" и "Петров П. П. Отправка" - то проделать то же самое со всеми этими папками (для каждой папки отдельный архив).
Затем скопировать этот архив (архивы) в папку "C:\Отправка" и в папку "C:\Отправленные".
После этого полностью очистить папку "C:\Archive" от всех лежащих там файлов.

Не знаю, насколько возможна операция с переименованием, но она очень желательна...

Из архиваторов в наличии есть 7Zip, но если можно средствами Windows сделать архив - то тоже пойдёт.

Заранее спасибо.

Отправлено: 09:53, 26-08-2015

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Цитата kirillius:
то есть пробел после каждого инициала »
Чем инициалы будут разделяться ОБЯЗАТЕЛЬНО? (в противном случае их будет не отличить от двойной фамилии или второго имени) Да и в принципе если входные данные толком не структурированы и не стандартизированы на выходе будет получаться каша.
по остальному приблизительно так

Код: Выделить весь код
pushd c:\Archive
FOR /f "delims=" %%d IN ('dir * /b /a:d') do (
7za.exe a -tzip -r0 "%%d.zip" "%%d"
copy "%%d.zip" "c:\Отправка\%%~nd.zip"
copy "%%d.zip" "c:\Отправленные\%%~nd.zip"
del /f /q "%%d.zip" "%%d"
)
popd
exit /b 0
7z не устанавливал, но вроде должно выглядеть приблизительно так, лучше конечно, проверить.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:05, 26-08-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 136
Благодарности: 1

Профиль | Отправить PM | Цитировать


Проверил. Не получилось.
Для тестирования сделал так:

Код: Выделить весь код
pushd C:\Test
FOR /f "delims=" %%d IN ('dir * /b /a:d') do (
"C:\Program Files\7-Zip\7z.exe" a -tzip -r0 %%d.zip" "%%d"
copy "%%d.zip" "C:\Test\Archive\1\%%~nd.zip"
copy "%%d.zip" "C:\Test\Archive\2\%%~nd.zip"
del /f /q "%%d.zip" "%%d"
)
popd
exit /b 0
В папке Test лежала папка "Иванов И. И. Отправка" с файлами, в итоге создался пустой архив с именем Иванов.zip, файлы из папки "Иванов И. И. Отправка" удалились, но сама папка осталась...
Указанных папок Archive\1\ и Archive\2\ не появилось...
Что может быть не так?

7za.exe - такого файла у меня в установленном 7zip нету, поэтому подставил что было...

Цитата Elven:
Чем инициалы будут разделяться ОБЯЗАТЕЛЬНО? (в противном случае их будет не отличить от двойной фамилии или второго имени) Да и в принципе если входные данные толком не структурированы и не стандартизированы на выходе будет получаться каша. »
Как минимум, нужно чтобы хотя бы просто копировалось имя папки, а то почему-то после первого же пробела всё отсекается...

Отправлено: 12:21, 26-08-2015 | #3


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Проблема в пробелах. Я вижу в третьей строке одной кавычки не хватает
Код: Выделить весь код
"C:\Program Files\7-Zip\7z.exe" a -tzip -r0 "%%d.zip" "%%d"
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:30, 26-08-2015 | #4


Пользователь


Сообщения: 136
Благодарности: 1

Профиль | Отправить PM | Цитировать


Теперь всё работает почти так, как надо (за исключением переименования, с которым пока решено не заморачиваться).

Код: Выделить весь код
pushd C:\Test
FOR /f "delims=" %%d IN ('dir * /b /a:d') do (
"C:\Program Files\7-Zip\7z.exe" a -tzip -r0 "%%d".zip"
copy "%%d.zip" "C:\%%d.zip"
del /f /q "%%d.zip" "%%d"
)
popd
exit /b 0
Но есть две проблемы:
1. Если в папке C:\Test лежит например две папки, то они все попадают в архив (вернее даже, создаются два архива, но в обоих по две папки), а надо чтобы каждая папка архивировалась отдельно.
2. При удалении удаляются файлы из папок, но сами папки не удаляются, надо чтобы они тоже удалялись.

Отправлено: 11:06, 28-08-2015 | #5


Старожил


Сообщения: 445
Благодарности: 4

Профиль | Отправить PM | Цитировать


Ребят, как можно реализовать сделующее:
Имеем машину с sql, каждый день в 01:00 sql делает резервную копию базы. Нужно брать послдений созданный файл, заархивировать и выложить на расшареную папку в сети.
Подскажите такое реально? Что бы не всю папку бакапить

Отправлено: 12:14, 13-05-2016 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Реально. Путь к папке? Путь к разделённому ресурсу? Чем будете архивировать?

Отправлено: 12:45, 13-05-2016 | #7


Старожил


Сообщения: 445
Благодарности: 4

Профиль | Отправить PM | Цитировать


Цитата Iska:
Реально. Путь к папке? Путь к разделённому ресурсу? Чем будете архивировать? »
Впринцепе уже через sql решил, но там только один файл делается(
Бакап лежит в папке d:\1C_82_sql
Ложить надо в \\192.168.2.254\backup
SQL бакап имеет такого плана имя mag_backup_2016_04_23_223501_0446883.bak, в всех совпадает mag_backup_2016_04_23_2235*********.bak
WINRAR лежит c:\program files\winrar\winrar.exe

Отправлено: 12:57, 13-05-2016 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Архивирование, переименование и перемещение файлов с помощью BAT-файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Создание bat файла c помощью другого bat файла GODolubOFF Скриптовые языки администрирования Windows 11 03-01-2016 20:30
CMD/BAT - переименование группы файлов с запросом начального номера и перемещение kozikozi Скриптовые языки администрирования Windows 19 29-07-2014 19:31
Интерфейс - [решено] Перемещение файла с помощью Меню Отправить RogerUP Microsoft Windows 7 7 16-01-2011 10:36
CMD/BAT - [решено] Скрипт перемещение+переименование файла Pyrocar Скриптовые языки администрирования Windows 2 30-08-2010 14:25




 
Переход