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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Нужно переместить файлы по определённым условиям и заархивировать (http://forum.oszone.net/showthread.php?t=339637)

Alexa_ 11-03-2019 21:10 2862596

Нужно переместить файлы по определённым условиям и заархивировать
 
Доброго всем вечера. Помогите молодому подавану.
Нужны следующие действия в одном BAT файле:
  1. Создающий в текущем каталоге (в котором находится запускаемый bat-файл) каталог с названием в виде «Screenshots_текущая_дата» и перемещающий туда из текущего каталога все файлы с расширением, указанном в качестве первого параметра, передаваемого из командной строки.
  2. Записывающий названия всех перемещенных файлов в файл d:\screenshots.found (дописывает в конец файла или создает новый, если такого не было), который находится в том же каталоге, что и запускаемый bat-файл.
  3. Архивирующий папку с перемещенными файлами и удаляющий ее оригинал.
  4. Ожидающий нажатия любой клавиши для своего завершения.

Iska 12-03-2019 01:59 2862635

Цитата:

Цитата Alexa_
Создающий в текущем каталоге (в котором находится запускаемый bat-файл)… »

Текущий каталог и каталог, в котором находится пакетный файл — это разные сущности. Иногда эти каталоги могут и совпадать, но Вы должны отчётливо понимать, что это две разные сущности.

Цитата:

Цитата Alexa_
Архивирующий папку с перемещенными файлами и удаляющий ее оригинал. »

1. Как, чем и во что «архивирующий»?
2. Невозможно удалить текущий каталог. Тем более, какой смысл его удалять, если в нём же мы создаём каталог с архивом?!

Alexa_ 12-03-2019 10:05 2862664

Цитата:

Цитата Iska (Сообщение 2862635)
Цитата:

Цитата Alexa_
Создающий в текущем каталоге (в котором находится запускаемый bat-файл)… »

Текущий каталог и каталог, в котором находится пакетный файл — это разные сущности. Иногда эти каталоги могут и совпадать, но Вы должны отчётливо понимать, что это две разные сущности.

Цитата:

Цитата Alexa_
Архивирующий папку с перемещенными файлами и удаляющий ее оригинал. »

1. Как, чем и во что «архивирующий»?
2. Невозможно удалить текущий каталог. Тем более, какой смысл его удалять, если в нём же мы создаём каталог с архивом?!

Смысл такой:
Закидываем батник в папку с разными файлами. "mover.bat jpeg" батник согласно параметра перемещает файлы заданного типа в им же созданную ПАПКУ screenshots_%date%. Затем эту созданную папку архивирует встроенным в винду архиватором. После архивации папка screenshots_%date% удаляется.
Надеюсь понятно написал? Вы просто не внимательно прочитали текст. Там про создание папки с текущей датой в имени написано.

Iska 12-03-2019 10:27 2862673

Цитата:

Цитата Alexa_
Затем эту созданную папку архивирует встроенным в винду архиватором. »

Это, простите, каким же?

mwz 12-03-2019 11:16 2862683

Цитата:

Цитата Iska
Это, простите, каким же? »

zipfldr.dll, полагаю, "Сжатые ZIP-папки". :)

megaloman 12-03-2019 12:09 2862700

Архивирую семьзипом
Код:

@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


Iska 12-03-2019 12:53 2862704

Цитата:

Цитата mwz
zipfldr.dll, полагаю, "Сжатые ZIP-папки". »

На пакетных файлах тогда, полагаю, совсем никак. На WSH — будут проблемы при заметных объёмах (особенность реализации объекта Automation Проводника, он работает в асинхронном режиме: возврат управления в скрипт осуществляется сразу, до завершения работы метода, как следствие: завершился скрипт — «схлопнулся» и объект). На PoSH — так там нынче и своя реализация есть ;).

Alexa_ 12-03-2019 23:12 2862804

megaloman, спасибо, задача выполнена.

Kirill1500 18-06-2022 13:42 2986866

megaloman, День добрый. Можете подробно объяснить написанные команды?

megaloman 20-06-2022 10:13 2986935

Kirill1500, День добрый. Что конкретно не понятно?

Kirill1500 23-06-2022 15:19 2987174

megaloman, как прописать встроиный в виндоус 10 архиватор? В какой строке указать тип нужных файлов?

Kirill1500 23-06-2022 15:42 2987176

megaloman, да и в целом, я не понимаю, что нужно изменить, что бы у меня работало.

megaloman 23-06-2022 15:48 2987177

Kirill1500, Ставьте задачу подробно. Описывать каждую строку подробно, объемный нудный труд.
Цитата:

Цитата Kirill1500
как прописать встроиный в виндоус 10 архиватор »

Я не помогу, у меня Win7

Kirill1500 23-06-2022 16:03 2987180

megaloman, задача 1в1 как в теме, перемещаемые файлы в формате .txt, пускай тогда будет WinRAR (C:\Progi\winRAR\WinRAR.exe).

megaloman 23-06-2022 18:05 2987195

Цитата:

Цитата Alexa_
Создающий в текущем каталоге (в котором находится запускаемый bat-файл) каталог с названием в виде «Screenshots_текущая_дата» и перемещающий туда из текущего каталога все файлы с расширением, указанном в качестве первого параметра, передаваемого из командной строки. »

Цитата:

Цитата megaloman
Set "OutPref=Screenshots_" »

Здесь прописывается префикс имени создаваемой папки, куда перемещаются файлы, при условии, что батник находится в одной папке с файлами, для сегодня это Screenshots_20220623
Цитата:

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


Время: 07:50.

Время: 07:50.
© OSzone.net 2001-