Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Архивирование, переименование и перемещение файлов с помощью BAT-файла (http://forum.oszone.net/showthread.php?t=304493)

kirillius 26-08-2015 09:53 2546064

Архивирование, переименование и перемещение файлов с помощью BAT-файла
 
Здравствуйте.

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

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

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

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

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

Elven 26-08-2015 12:05 2546133

Цитата:

Цитата 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 не устанавливал, но вроде должно выглядеть приблизительно так, лучше конечно, проверить.

kirillius 26-08-2015 12:21 2546137

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

Код:

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
Чем инициалы будут разделяться ОБЯЗАТЕЛЬНО? (в противном случае их будет не отличить от двойной фамилии или второго имени) Да и в принципе если входные данные толком не структурированы и не стандартизированы на выходе будет получаться каша. »

Как минимум, нужно чтобы хотя бы просто копировалось имя папки, а то почему-то после первого же пробела всё отсекается...

Elven 26-08-2015 12:30 2546139

Проблема в пробелах. Я вижу в третьей строке одной кавычки не хватает
Код:

"C:\Program Files\7-Zip\7z.exe" a -tzip -r0 "%%d.zip" "%%d"

kirillius 28-08-2015 11:06 2546831

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

Код:

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. При удалении удаляются файлы из папок, но сами папки не удаляются, надо чтобы они тоже удалялись.

kot488 13-05-2016 12:14 2634349

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

Iska 13-05-2016 12:45 2634362

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

kot488 13-05-2016 12:57 2634368

Цитата:

Цитата 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


Время: 17:25.

Время: 17:25.
© OSzone.net 2001-