• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

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

Mamustsm

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

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#2
Здравствуйте, @Mamustsm !

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

возможно ли реализовать замену символов "_", "." в именах директорий, пакетным файлом BAT?
Можно.
Вы хотите переименовать папки?
Замену чего на что?
 

Mamustsm

Новый пользователь
Сообщения
5
Симпатии
0
#3
Да, нужно переименовать, около трёх тысяч папок. Изменить в имени знак "_" (нижнее подчеркивание) на "-" (дефис или минус). Удалить точку между цифрами в конце имени папок.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#4
На cmd это будет сделать проблематично. На VBS подойдёт?
Либо нужны более точные критерии, например, слева от точки, которую нельзя удалять, всегда стоит слово "dir", или может быть что-то другое?
 

Mamustsm

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

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#6
Ладно, ещё один вопрос: имя и код вcегда разделены символом [
?
 

Mamustsm

Новый пользователь
Сообщения
5
Симпатии
0
#7
Да, верно, разделены. Код заключён в символы [].
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#8
В таком случае, можно подобрать правило и для 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.
Предупреждение: если в имени папки попадутся знаки восклицания (!), все они будут удалены.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,003
Симпатии
5,687
#9
Извиняюсь, но для чего заморачиваться с скриптом если можно сделать пакетное переименование с Total Commander. Или такое переименование надо делать регулярно? Да даже если регулярно, то можно сохранить шаблон в ТС.
PS. просто предлагаю вам более гибкое и простое на мой взгляд решение.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#10
@regist, никогда, кстати, не пробовал. А какой функцией там вызывается переименование по регулярке?
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,003
Симпатии
5,687
#11
Dragokas, Ctrl + M. Дальше думаю разберёшься, если нет, то можешь посмотреть в русском переводе справки.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,003
Симпатии
5,687
#12
И по переименованию широкие возможности даже если не включать опцию регулярки.
Немного устаревшая Онлайновая русская справка (для TC 8.52a, 17.04.2016) Справка по Total Commander
 
Последнее редактирование:

Mamustsm

Новый пользователь
Сообщения
5
Симпатии
0
#14
Предупреждение: если в имени папки попадутся знаки восклицания (!), все они будут удалены.
Огромное спасибо! Работает правильно, точки в именах сохраняет.
А папки со знаком "!" в имени просто не трогает, оставляет как есть, не переименовывая и не удаляя знак "!". Это мелочь.
Спасибо!
 
Сверху Снизу