[CMD] Пакетная замена отдельных символов имён директорий в рамках одного каталога

Mamustsm

Новый пользователь
Сообщения
5
Реакции
0
Доброго времени суток!
Существуют в одной директории, большое количество директорий (папок), с именами типа "dir abc_123.4", "dir. abc_123.4".
Вопрос: возможно ли реализовать замену символов "_", "." в именах директорий, пакетным файлом BAT? В варианте "dir. abc_123.4" желательно оставить первую "." не тронутой (если это возможно).
Заранее спасибо!
 
Здравствуйте, @Mamustsm !

Добро пожаловать на SafeZone.

возможно ли реализовать замену символов "_", "." в именах директорий, пакетным файлом BAT?
Можно.
Вы хотите переименовать папки?
Замену чего на что?
 
Да, нужно переименовать, около трёх тысяч папок. Изменить в имени знак "_" (нижнее подчеркивание) на "-" (дефис или минус). Удалить точку между цифрами в конце имени папок.
 
На cmd это будет сделать проблематично. На VBS подойдёт?
Либо нужны более точные критерии, например, слева от точки, которую нельзя удалять, всегда стоит слово "dir", или может быть что-то другое?
 
Доброго времени суток!
Точку в названии желательно не удалять, так как она может быть частью сокращённого слова. Имена папок уникальны, как и их код в скобках, но, код содержит одинаковое количество символов как в примере ниже. Знак "_" (нижнее подчеркивание) и точка в коде имени всегда в одном месте. Точка, третья с конца имени, нижнее подчеркивание девятое, с конца имени папки, считая точку.
Пример имени файла: "S.T.M. manager [DFTS_3006.02]"
Вы мне очень поможете, даже если эти точки удалятся из имён.
Пример допустимого результата: "STM manager [DFTS-300602]"
Поскольку визуально проверить отсутствие точек в сокращениях гораздо легче.
Подойдёт решение и на VBS.
P.S. Мне не приходилось писать в Visual Basic Scripting.
Спасибо!
 
Ладно, ещё один вопрос: имя и код вcегда разделены символом [
?
 
В таком случае, можно подобрать правило и для CMD:

CMD/BATCH:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

set Folder=g:\test\do

For /f "delims=[ tokens=1*" %%a in ('dir /b /ad "%Folder%\*"') do (
  set name=%%a
  set ID=%%b
  set "ID=!ID:_=-!"
  set "ID=!ID:.=!"
  echo "%%a[%%b" =^> "!name![!ID!"> example.txt
  rem ren "%Folder%\%%a[%%b" "!name![!ID!"
)

pause

Папку задавать в переменной Folder.
Будет создан файл example.txt с предлагаемыми заменами.
Если всё устраивает, удалите строку с echo, а также команду rem.
Предупреждение: если в имени папки попадутся знаки восклицания (!), все они будут удалены.
 
Извиняюсь, но для чего заморачиваться с скриптом если можно сделать пакетное переименование с Total Commander. Или такое переименование надо делать регулярно? Да даже если регулярно, то можно сохранить шаблон в ТС.
PS. просто предлагаю вам более гибкое и простое на мой взгляд решение.
 
@regist, никогда, кстати, не пробовал. А какой функцией там вызывается переименование по регулярке?
 
Dragokas, Ctrl + M. Дальше думаю разберёшься, если нет, то можешь посмотреть в русском переводе справки.
 
И по переименованию широкие возможности даже если не включать опцию регулярки.
Немного устаревшая Онлайновая русская справка (для TC 8.52a, 17.04.2016) Справка по Total Commander
 
Последнее редактирование:
Предупреждение: если в имени папки попадутся знаки восклицания (!), все они будут удалены.

Огромное спасибо! Работает правильно, точки в именах сохраняет.
А папки со знаком "!" в имени просто не трогает, оставляет как есть, не переименовывая и не удаляя знак "!". Это мелочь.
Спасибо!
 
Назад
Сверху Снизу