Показать полную графическую версию : [решено] Нужно переместить файлы по определённым условиям и заархивировать
Доброго всем вечера. Помогите молодому подавану.
Нужны следующие действия в одном BAT файле:
Создающий в текущем каталоге (в котором находится запускаемый bat-файл) каталог с названием в виде «Screenshots_текущая_дата» и перемещающий туда из текущего каталога все файлы с расширением, указанном в качестве первого параметра, передаваемого из командной строки.
Записывающий названия всех перемещенных файлов в файл d:\screenshots.found (дописывает в конец файла или создает новый, если такого не было), который находится в том же каталоге, что и запускаемый bat-файл.
Архивирующий папку с перемещенными файлами и удаляющий ее оригинал.
Ожидающий нажатия любой клавиши для своего завершения.
Создающий в текущем каталоге (в котором находится запускаемый bat-файл)… »
Текущий каталог и каталог, в котором находится пакетный файл — это разные сущности. Иногда эти каталоги могут и совпадать, но Вы должны отчётливо понимать, что это две разные сущности.
Архивирующий папку с перемещенными файлами и удаляющий ее оригинал. »
1. Как, чем и во что «архивирующий»?
2. Невозможно удалить текущий каталог. Тем более, какой смысл его удалять, если в нём же мы создаём каталог с архивом?!
Создающий в текущем каталоге (в котором находится запускаемый bat-файл)… »
Текущий каталог и каталог, в котором находится пакетный файл — это разные сущности. Иногда эти каталоги могут и совпадать, но Вы должны отчётливо понимать, что это две разные сущности.
Архивирующий папку с перемещенными файлами и удаляющий ее оригинал. »
1. Как, чем и во что «архивирующий»?
2. Невозможно удалить текущий каталог. Тем более, какой смысл его удалять, если в нём же мы создаём каталог с архивом?!
Смысл такой:
Закидываем батник в папку с разными файлами. "mover.bat jpeg" батник согласно параметра перемещает файлы заданного типа в им же созданную ПАПКУ screenshots_%date%. Затем эту созданную папку архивирует встроенным в винду архиватором. После архивации папка screenshots_%date% удаляется.
Надеюсь понятно написал? Вы просто не внимательно прочитали текст. Там про создание папки с текущей датой в имени написано.
Затем эту созданную папку архивирует встроенным в винду архиватором. »
Это, простите, каким же?
Это, простите, каким же? »
zipfldr.dll, полагаю, "Сжатые ZIP-папки". :)
megaloman
12-03-2019, 12:09
Архивирую семьзипом @Echo Off
cls
Set "OutPref=Screenshots_"
Set "OutLog=Z:\screenshots.found
Set "Arc=C:\Program Files\7-Zip\7zG.exe"
If "%~1"=="" (
Echo %~dpnx0 запущен без аргумента &Echo.
Pause
Exit /B 2
)
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" &Call Set "@Tdate=%%@TDate:~0,8%%"
2>nul Md "%OutPref%%@Tdate%"
FOR %%f IN ("*.%~1") DO (
>>"%OutLog%" Echo "%~dp0%%f" -^> "%~dp0%OutPref%%@Tdate%\"
>nul Move /Y "%%f" "%OutPref%%@Tdate%\"
)
"%Arc%" a -r -sdel "%OutPref%%@Tdate%" "%OutPref%%@Tdate%\"
pause
Exit /B 0
zipfldr.dll, полагаю, "Сжатые ZIP-папки". »
На пакетных файлах тогда, полагаю, совсем никак. На WSH — будут проблемы при заметных объёмах (особенность реализации объекта Automation Проводника, он работает в асинхронном режиме: возврат управления в скрипт осуществляется сразу, до завершения работы метода, как следствие: завершился скрипт — «схлопнулся» и объект). На PoSH — так там нынче и своя реализация есть ;).
megaloman, спасибо, задача выполнена.
Kirill1500
18-06-2022, 13:42
megaloman, День добрый. Можете подробно объяснить написанные команды?
megaloman
20-06-2022, 10:13
Kirill1500, День добрый. Что конкретно не понятно?
Kirill1500
23-06-2022, 15:19
megaloman, как прописать встроиный в виндоус 10 архиватор? В какой строке указать тип нужных файлов?
Kirill1500
23-06-2022, 15:42
megaloman, да и в целом, я не понимаю, что нужно изменить, что бы у меня работало.
megaloman
23-06-2022, 15:48
Kirill1500, Ставьте задачу подробно. Описывать каждую строку подробно, объемный нудный труд. как прописать встроиный в виндоус 10 архиватор » Я не помогу, у меня Win7
Kirill1500
23-06-2022, 16:03
megaloman, задача 1в1 как в теме, перемещаемые файлы в формате .txt, пускай тогда будет WinRAR (C:\Progi\winRAR\WinRAR.exe).
megaloman
23-06-2022, 18:05
Создающий в текущем каталоге (в котором находится запускаемый bat-файл) каталог с названием в виде «Screenshots_текущая_дата» и перемещающий туда из текущего каталога все файлы с расширением, указанном в качестве первого параметра, передаваемого из командной строки. »Set "OutPref=Screenshots_" »Здесь прописывается префикс имени создаваемой папки, куда перемещаются файлы, при условии, что батник находится в одной папке с файлами, для сегодня это Screenshots_20220623Set "OutLog=Z:\screenshots.found »Здесь прописан путь и имя лог-файла.
Расширение обрабатываемых файлов указывается при запуске батника. Если Ваш командный файл называется, например, batfile.bat, то для обработки txt-файлов надо запустить:
batfile.bat txtпускай тогда будет WinRARБез создания промежуточной папки@Echo Off
cls
Set "OutPref=Screenshots_"
Set "OutLog=Z:\screenshots.found
Set "Arc=C:\Program Files\WinRAR\WinRAR.exe"
If "%~1"=="" (
Echo %~dpnx0 запущен без аргумента &Echo.
Pause
Exit /B 2
)
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" &Call Set "@Tdate=%%@TDate:~0,8%%"
"%Arc%" a -r -agYYYYMMDD -ap"%OutPref%%@Tdate%\" -logfp="%OutLog%" -df "%OutPref%.zip" "*.%~1"
pause
Exit /B 0Префикс, путь к лог-файлу, путь к архивытору пропишите свои.
Вообще-то изначальная постановка слегка замудрёная, но клиент хотел так, получил такое решение и, надеюсь, удовлетворён, так как пометил пост как полезный.
Вообще-то при использовании WinRar батник вообще не нужен. Если Вам нужен результат, а не применение решения задачи, поставленной другим, то вот:"C:\Program Files\WinRAR\WinRAR.exe" a -r -agYYYYMMDD -df -ep2 -logfp="Z:\screenshots.found" "Screenshots_.zip" "*.txt"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.