Пакетно уменьшить пространство в именах файлов - PullRequest
0 голосов
/ 07 января 2020

После пакетного переименования такого количества файлов с использованием пакетного файла я обнаружил, что структура имен выглядит следующим образом:

FILENAME __ ###. Jpg

Есть два пробела (два подчеркивания выше) между FILENAME и нумерацией ###. Как я могу удалить один пробел (или уменьшить эти 2 пробела до 1 пробела) для всех файлов (может с разными суффиксами) в каталоге с вышеуказанной структурой именования, используя командный файл пакета в командной строке системы Windows.

Большое спасибо.

1 Ответ

1 голос
/ 07 января 2020

Если у вас нет имен файлов, начинающихся с пробела, то

@echo off
for %%F in ("*  *") do for /f "tokens=1* eol= delims= " %%A in ("%%F") do ren "%%F" "%%A %%B"

Приведенное выше будет обрабатывать один прогон любого количества последовательных пробелов и преобразовывать его в один пробел.

Если у вас несколько пробелов, вы можете просто проанализировать больше токенов. Вам не нужно беспокоиться о разборе большего числа токенов, чем существует, поскольку Windows автоматически удаляет конечные пробелы и точки из имен файлов. Можно обработать до 31 пробела (32 токена) с помощью одного FOR /F, и просто справиться с 25 пробелами (токены от A до Z). Приведенный ниже код обрабатывает 9 пробелов, что, вероятно, более чем достаточно.

@echo off
for %%f in ("*  *") do for /f "tokens=1-9* eol= delims= " %%A in ("%%f") do ^
ren "%%f" "%%A %%B %%C %%D %%E %%F %%G %%H %%I %%J"

Или, если вы получите JREN.BAT , гибридную утилиту переименования регулярных выражений JScript / batch , затем вы можете использовать:

jren "  +" " " /fm "*  *"

Решение JREN.BAT будет обрабатывать все экземпляры последовательных пробелов независимо от их количества.

Если вы используете JREN.BAT в другом пакетном сценарии, тогда вы должны использовать call jren, чтобы управление вернулось к вашему сценарию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...