Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
x3on
1 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 12
1

Создание папки на основе частей имён файлов

27.08.2015, 17:27. Просмотров 1126. Ответов 3
Метки нет (Все метки)

Доброго времени суток.
Есть задачка: В директории существует n-ое количество файлов *.mxl. например:
fg_7777_19_20150801.xml
fg_7777_40_20150821.xml
fg_7777_1_20150822.xml
fg_7777_9_20150905.xml
fg_7777_4_20150920.xml

Нужно чтобы батник на основании этих файлов создавал одну папку имя которого будет выглядеть так:
01-20 (08-09_15), где 01 и 08 берутся из fg_7777_19_20150801.xml , а 20, 09 и 15, соответственно из fg_7777_4_20150920.xml.

те если отсортировать файлы по имени, то создаваемая папка будет иметь название собранное из частей первого и последнего сортированных файлов. Не могу понять как это сделать? Записывал имена файлов в текст. документ с сортировкой по имени но не могу понять, как при помощи цикла работать именно с первой и последней строкой да еще и с конкретными частями подстроки...

Заранее благодарю!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2015, 17:27
Ответы с готовыми решениями:

Копирование файлов в нужные папки, исходя из имён файлов
подскажите, задача примерно аналогичная в папке множество файлов wav, у всех в...

Копирование файлов в нужные папки в зависимости от их имён
Подскажите, пожалуйста. Можно ли реализовать такую функцию? Есть файлы вида...

Поиск на диске файлов с расширениями .txt и .docx и создание списка имён найденных файлов
Помогите, нужно создать bat файл, который ищет на диске файлы *.txt *docx а...

Изменение дат модификации (изменения) файлов на основе имён папок, в которых находятся эти файлы
Всем привет! Столкнулся с такой задачей: есть папки вида ГГГГ\\*.jpg ГГГГ -...

Копирование содержимого одной папки в другую с переименованием файлов и папок в случае совпадения имён
Добрый день! Необходимо решение следующей задачи: Есть папка OUT , находится...

3
ComSpec
3409 / 1953 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
27.08.2015, 19:07 2
Лучший ответ Сообщение было отмечено vavun как решение

Решение

Поместите пакетный файл с кодом

Windows Batch file
1
2
3
4
5
6
@echo off
for /f %%i in ('(for /f "tokens=4 delims=_." %%i in ('"2>nul dir/a-d/b *.xml"'^) do @echo.%%i^)^| sort') do (
 if not defined last set first=%%i
 set last=%%i
)
2>nul md "%first:~-2%-%last:~-2% (%first:~-4,2%-%last:~-4,2%_%last:~-6,2%)"
в директорию, в которой находятся XML-файлы, и запустите. Нужная папка будет создана в этой же директории.
1
x3on
1 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 12
28.08.2015, 13:44  [ТС] 3
ComSpec, спасибо, все круто работает. Единственное остается пару вопросов, если можно. Какую роль выполняет 2>nul там где мы указываем параметры файла и там где собирается имя папки? И какую роль играет символ ^ и символ | ?

И вообще правильно ли я понял принцип скрипта:
1) Заходим в цикл в котором определяем что работает с 'командой определяемой внутренним циклом'

2) Заходим во внутренний цикл в котором определяем, что работаем с файлами по шаблону: берем только 4 подстроку, а разделителями выступают _ и . файлы берем в необходимой директории выводим именно файлы, а не каталоги, формата *.mxl , откидывая расширение и оставляя только имена файлов, каждый цикл записываем(?) в echo, получаем 5 команд echo c содержимым: 20150801 ....... 20150920, после сортируем эти echo.

3) Возвращаемся с готовыми командами echo в наш внешний цикл, где при обработке первой команды содержимое записывается в переменную цикла %%i а оттуда в объявленную переменную first, тк заданное условие выполнилось. После создается еще переменная last, куда тоже записывается это же значение.
При втором прогоне цикла со следующем echo и последующих циклов будет переписываться только значение в переменной last, тк условие перестанет выполняться после первого цикла (в нем переменная last объявляется). После окончания всех прогонов цикла мы имеем 2 переменные с о значениями. firs = 20150801 и last = fg_7777_4_20150920.

4)Создаем в директории новую папку имя которой собираем из частей наших двух переменных first и last.

Еще раз огромное спасибо!
0
Garry Galler
1832 / 1391 / 530
Регистрация: 28.10.2013
Сообщений: 3,550
28.08.2015, 14:33 4
2>nul - перенаправление потока ошибок в dev/null (просто в nul :-) - в никуда, дабы не лицезреть их в окне cmd и не портить вывод)
^ - экранирование спецсимволов cmd
| - конвейер как unix (передача вывода предыдущей команды следующей)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2015, 14:33

Поиск файлов по списку имён и по заданным расширениям с выводом полных имён найденных в текстовый файл
Доброго времени суток! Стоит задача сделать батник. Для поиска файлов по...

Создание текстового файла со списком имён находящихся в заданной папке файлов с указанием их расположения
Добрые Люди помогите, есть папка с файлами и папками интересует ВАТ который...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru