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

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем arch144, 4 июл 2016.

Метки:
  1. arch144
    Оффлайн

    arch144 Новый пользователь

    Сообщения:
    2
    Симпатии:
    0
    Стоит такая задача
    Есть каталог например 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

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

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.498
    Симпатии:
    4.313
    Здравствуйте, arch144 !

    Код (DOS):
    @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
     
    Kиpилл нравится это.
  3. arch144
    Оффлайн

    arch144 Новый пользователь

    Сообщения:
    2
    Симпатии:
    0
    Круто!! :)
    Спасибо огромное!
    И главное теперь есть от чего отталкиваться. Есть более сложные задачи с другим уровнем вложения, но принцип примерно такой же. И их уже сам попробую раскидать. :Good:
    --- Объединённое сообщение, 4 июл 2016 ---
    а.. я понял. Дефис выступает в качестве разделителя и у нас сразу появляется 2 нужные переменные. И не надо никаких переборов символов. Все гениальное просто :)
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.498
    Симпатии:
    4.313
    Пожалуйста. Обращайтесь.
    Да.
    1*
    1 - означает, что первая часть (перед разделителем) попадет в переменную цикла %%a
    * - означает, что все последующие части (в т.ч. и разделители) попадут в следующую букву, т.е. %%b
     

Поделиться этой страницей