Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 01.12.2017
Сообщений: 16

Преобразование файлов и перенос их в папки(названия папок содержится в именах файлов)

01.12.2017, 03:05. Показов 4162. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи!

Тяжело быть глупой, помогите автоматизировать (пишу полную задачу, но если это слишком губасто, то важнее та часть кода, где перенос по папкам-датам).

Кратко: Папке имеем зашифрованные архивы (*.p7e) и просто zip-архивы. Нужно расшифровать p7e, потом все zip-ы (и которые расшифровали и те, что были незашифрованными). Полученное разложить в зависимости от даты указанной в имени файлов.

Нужно расшифровать все файлы *.p7e в папке c:\abc\ с помощью командной утилиты "encrypt.exe -in xxxx.p7e -out xxxx.zip",
но команда эта не принимает несколько файлов по маске *.p7e, нужно в цикле по одному файлу все расшифровать.

В результате получатся zip архивы, которые вместе с другими лежащимися тут незашифрованными архивами zip, нужно разархивировать.
Из zip вылупятся xxxx.xml

Полученные p7e, zip, xml нужно разложить по папкам-датам, а нужная дата содержится в имени файла:
В папке c:\abc лежат
AA123456_AAA12_00T_ddmmyy_123456789.xml,
AA123456_AAA12_00T_ddmmyy_123456789.zip,
AA123456_AAA12_00T_ddmmyy_123456789.p7e
например,
AA123456_AAA12_00T_301117_123456789.xml, где 301117 - это дата - 30 ноября 2017 года

Нужно разложить в папки

G:\yyyy\название месяца\dd.mm\, в случае с приведенным выше примером в папку
G:\2017\ноябрь\30.11\

Файлов много, в названии вместо букв могут быть цифры, вместо цифр могут быть буквы, но дата всегда на определенной позиции.

Мой маленький мозг не может осилить логику for и используемые в них загогулины

Спасибо всем откликнувшимся и не равнодушным
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2017, 03:05
Ответы с готовыми решениями:

Создание папок по цифровому названию файлов и перенос этих файлов в созданные папки
Доброго времени суток. Необходим БАТ файл. Что имеем: Общую папку с файлами типа (A0010061609.DBF, A0010061609.PRN, A0010061609.SB,...

Создание папок с именами заданных файлов и перемещение этих файлов в созданные папки
Подскажите пожалуйста как по названиям файлов txt создать папки и положить в каждую из папок файл с таким же названием.

Перенос файлов в папки, имена которых содержат часть названия файла или расширение файла
Здравствуйте! Прочитал все похожие темы про ВАТ, но все в кучу сложить не смог, так как очень слабо понимаю команды. Вопрос такой: каждые...

5
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
01.12.2017, 17:17
Лучший ответ Сообщение было отмечено IrSh как решение

Решение

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
set "d=C:\abc"
pushd "%d%"
 :: Проверить отдельно работу с encrypt.exe, не знаю ее синтаксиса
 for /f "delims=" %%a in ('dir /a-d/b "*.p7e"') do encrypt.exe -in "%%a" -out "%%~na.zip"
 7z.exe x "*.zip" -y
 for /f "tokens=1-4* delims=_" %%a in ('dir /a-d/b') do set "ide=%%d"& call :cf "%%ide:~,2%%" "%%ide:~2,2%%" "%%ide:~-2%%" "%%a_%%b_%%c_%%d_%%e"
popd
pause& exit
 
:cf
 for /f "tokens=%~2" %%a in ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь") do set "nmm=%%a"
 if not exist "G:\20%~3\%nmm%\%~1.%~2" md "G:\20%~3\%nmm%\%~1.%~2"
 copy "%~4" "G:\20%~3\%nmm%\%~1.%~2" 
exit /b
Сохранить в кодировке OEM 866
1
0 / 0 / 0
Регистрация: 01.12.2017
Сообщений: 16
04.12.2017, 14:34  [ТС]
Огромное спасибо. Очень помогли

Добавлено через 2 часа 7 минут
Хотела бы уточнить, а есть ли разница писать так или так:
Windows Batch file
1
For %%A In ("%d%\*.p7e") Do
Windows Batch file
1
For /f "delims=" %%A In ('dir /a-d/b "*.p7e"') Do
как лучше? или правильнее
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
04.12.2017, 15:35
Цитата Сообщение от IrSh Посмотреть сообщение
как лучше?
Кликните здесь для просмотра всего текста

Code
1
2
3
4
5
6
7
8
9
10
11
12
DIR [диск:][путь][имя файла] [/A[[:]атрибуты]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]порядок сортировки]] [/P] [/Q] [/R] [/S] [/T[[:]время]] [/W] [/X] [/4]
 
  [диск:][путь][имя файла]
              Диск, каталог или имена файлов для включения в список.
 
  /A          Отображение файлов с указанными атрибутами.
  атрибуты     D  Каталоги.            R  Файлы, доступные только для чтения.
               H  Скрытые файлы.       A  Файлы, готовые для архивирования.
               S  Системные файлы.     I  Файлы с неиндексированным содержимым.
               L  Точки повторной обработки.  -  Префикс "-" имеет значение НЕ.
  /B          Вывод только имен файлов.

во втором случае из всего списка мы убрали только папки (-d), остальное, подвластное dir будет выведено, а уже надо и такие файлы (есть такая необходимость) или нет выводить это только вы знаете и вам решать. Мне всегда удобнее через dir. И быстро и фильтр и маска (и рекурсия) и дополнительно через For /f тоже много чего можно менять в строке.
1
0 / 0 / 0
Регистрация: 01.12.2017
Сообщений: 16
04.12.2017, 16:48  [ТС]
А как правильно с dir указать несколько типов сразу в In?
например, если действия Do нужно будет делать над *.p7e и *.p7a

Добавлено через 52 минуты
У меня еще одно уточнение по второй части (переносу файлов)

Кроме файлов структуры
AA123456_AAA12_00T_ddmmyy_123456789.*
в директорию валятся и файлы без какой-то определенной структуры - всякие doc, docs, pdf и др.

Эти файлы уносятся туда же в сегодняшнюю дату.
Я планировала разбирать по датам файлы структуры AA123456_AAA12_00T_ddmmyy_123456789.* (что Вы реализовали), а потом все оставшееся файлы просто переносить в папку текущего дня.

Но когда отрабатывает
Windows Batch file
1
2
3
4
5
6
7
8
9
for /f "tokens=1-4* delims=_" %%a in ('dir /a-d/b') do set "ide=%%d"& call :cf "%%ide:~,2%%" "%%ide:~2,2%%" "%%ide:~-2%%" "%%a_%%b_%%c_%%d_%%e"
popd
pause& exit
 
:cf
 for /f "tokens=%~2" %%a in ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь") do set "nmm=%%a"
 if not exist "G:\20%~3\%nmm%\%~1.%~2" md "G:\20%~3\%nmm%\%~1.%~2"
 copy "%~4" "G:\20%~3\%nmm%\%~1.%~2" 
exit /b
на экран выводится информация про файлы несоответствующие данной структуре:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
Непредвиденное появление: aqwer.txt___".
"G:\20\\~,2ide:~2,2ide:~-2.aqwer.txt___"""
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Непредвиденное появление: Files.rar____".
"G:\20\\~,2ide:~2,2ide:~-2.Files.rar____"""
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Непредвиденное появление: Garbage.txt____".
"G:\20\\~,2ide:~2,2ide:~-2.Garbage.txt____"""
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Синтаксическая ошибка в имени файла, имени папки или метке тома.
В итоге файлы структуры AA123456_AAA12_00T_ddmmyy_123456789.* успешно раскладываются как задумано, оставшиеся файлы можно унести потом через move *.*, но как сделать чтобы не было этих пугающих ошибок на экране? засобачить все? или как-то это красиво можно оформить?
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
04.12.2017, 17:52
Цитата Сообщение от IrSh Посмотреть сообщение
нужно будет делать над *.p7e и *.p7a
Windows Batch file
1
... in ('dir /a-d/b "*.p7e" "*.p7a"') do ...
Цитата Сообщение от IrSh Посмотреть сообщение
все оставшееся файлы просто переносить в папку текущего дня
проще тогда перемещать иначе выборку дольше делать - код увеличится поболее.
Windows Batch file
1
2
3
4
5
6
7
8
9
 ...
 for /f "tokens=1-4* delims=_" %%a in ('dir /a-d/b "*.zip"') do ...
 2>nul md "%date%"& move "*" "%date%"
popd
pause& exit
 
:cf
 ...
 move "%~4" "G:\20%~3\%nmm%\%~1.%~2"
Добавлено через 5 минут
Цитата Сообщение от alpap Посмотреть сообщение
2>nul md "%date%"& move "*" "%date%"
или
Windows Batch file
1
for /f "delims=" %%a in ('dir /a-d/b^|find /v ".zip"') do (if not exist "%date%" md "%date%")& move "%%a" "%date%"
тогда можно оставить copy
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.12.2017, 17:52
Помогаю со студенческими работами здесь

Расчёт дат для их использования в именах файлов и папок при переименовании
День добрый!!! мне нужна помощь, подскажите как написать БАТНИК, что бы можно было копировать одну папку в тот каталог и что бы она еще...

Наличие кириллических символов в именах папок и файлов воспринимается как синтаксическая ошибка
Помогите пожалуйста решить следующую проблему: Есть локальный компьютер (Windows 7x64), в нем открываю cmd.exe, проверяю кодировку:...

Перевести названия папок/файлов в параметры (%1, %2)
Задание следующее: Пример кода: @echo off echo Копирование и удаление файла md A:\DIR1\DIR2 copy C:\ALPHA\BETA\GAMMA\TEXT1.TXT...

Копирование файлов из разных каталогов в каталоги с именами, соответствующими номерам в именах файлов
Добрый день! Помогите решить проблему. Есть семь папок (cam_1, cam_2, cam_3 и.т.д) с фотографиями (cam_1_00052.JPG, cam_1_00053.JPG,...

Перенос файлов из папки в папки под порядковыми номерами
Помогите пожалуйста написать bat фаил. Задача в следующем: существует 744 пустых папки 1.2.3.4.5. и т.д все они находиться в папке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru