Как скорректировать регулярное выражение CMD / BAT?

Приветствую!

Мне необходимо раскидать по папкам файлы, папки назвать по имени файла. Есть команда:

For %%a in (*.jpg) do md "%%~na"& move "%%~a" "%%~na"

подскажите, пожалуйста, как сделать, чтобы все файлы с именем типа: 20495BW_.jpg 20495BW.jpg 20495BW_(2).jpg 20495BW_(3).jpg 20495BW_*******.jpg (любые символы после нижнего подчеркивания) были перенесены в одну папку с именем 20495BW?

Заранее благодарю!
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Если у вас во всех файлах это префикс (20495BW) фиксированной длины (7 символов), то можно воспользоваться конструкцией выделения подстроки. Она описана в справке по команде set /?
Но, учитывая, что имя файла у вас находится в переменной цикла, то напрямую эту конструкцию применить нельзя - нужно предварительно значение %%a присвоить обычной переменной:
@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%a in (*.jpg) do (
  set "dirname=%%~na"
  set "dirname=!dirname:~,7!"
  md "!dirname!"& move "%%~a" "!dirname!\%%~nxa"
)


Но если количество символов до символа подчеркивания может быть разным, то вышеописанный способ не подойдет. В таком случае для разделения имени на части (с разделителем "_") нужно применить for /f:
@echo off
for %%a in (*_*.jpg) do (
  for /f "tokens=1 delims=_" %%b in ("%%~na") do  (md "%%b"& move "%%~a" "%%b\%%~nxa")
)

При необходимости можно задать несколько символов разделителей - запишите их друг за другом в параметре delims вложенного цикла.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы