Взять имя файла, удалить символы и создать каталог

arch144

Активный пользователь
Сообщения
2
Реакции
0
Баллы
81
Стоит такая задача
Есть каталог например PATH\SOURCE
В нем находятся файлы созданные по шаблону имя-номер.jpg
123-01.jpg
12345-02.jpg
123-02.jpg
1234-10.jpg
Нужно взять эти файлы, вычленить у них имя. По этому имени создать папку и поместить в эту папку файл переименовав его по номеру.

Т.е. В указанном выше примере в результате мы получим такие папки и имена файлов:
PATH\123\01.jpg
PATH\12345\02.jpg
PATH\123\02.jpg
PATH\1234\10.jpg
сам батник находится тут PATH\test.bat

Как вычленить имена файлов и из них сделать папки это я осилил, взяв за основу чей-то батник.
Но вот как из имени файла взять только то, что до дефиса находится, а потом файл обозвать по второй части имени? Моих скудных познаний не хватает ))
Буду признателен за любую помощь. Хотя бы какие-то образцы. Может какой-то цикл с перебором символов с условием пока не наткнется на "-"?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,574
Реакции
6,019
Баллы
798
Здравствуйте, arch144 !

CMD/BATCH:
@echo off
SetLocal EnableExtensions

cd /d "%~dp0"

set "srcFolder=.\SOURCE"

for /f "delims=" %%f in ('dir /b /a-d "%srcFolder%\*.jpg"') do (
  for /f "tokens=1* delims=-" %%a in ("%%f") do (
    if not exist "%%a" md "%%a"
    move /y "%srcFolder%\%%f" "%%a\%%b"
  )
)

pause
 

arch144

Активный пользователь
Сообщения
2
Реакции
0
Баллы
81
Круто!! :)
Спасибо огромное!
И главное теперь есть от чего отталкиваться. Есть более сложные задачи с другим уровнем вложения, но принцип примерно такой же. И их уже сам попробую раскидать. :Good:
а.. я понял. Дефис выступает в качестве разделителя и у нас сразу появляется 2 нужные переменные. И не надо никаких переборов символов. Все гениальное просто :)
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,574
Реакции
6,019
Баллы
798
Круто!! :)
Спасибо огромное!
Пожалуйста. Обращайтесь.
а.. я понял. Дефис выступает в качестве разделителя и у нас сразу появляется 2 нужные переменные. И не надо никаких переборов символов. Все гениальное просто :)
Да.
1*
1 - означает, что первая часть (перед разделителем) попадет в переменную цикла %%a
* - означает, что все последующие части (в т.ч. и разделители) попадут в следующую букву, т.е. %%b
 
Сверху Снизу