1

Я нахожусь в процессе переименования нескольких файлов из _2. к. Я хочу удалить суффикс "_2"

Мой первый обходной путь пытается

   ren *_2.* *.*

но это не работает. Помощь оказана.

6 ответов6

2

Решение

Вы можете использовать этот пакетный скрипт:

@echo off
setlocal enabledelayedexpansion

for /r %%G in (*_2.*) do (
set new=%%~nG
set new=!new:~0,-2!
ren "%%~G" "!new!%%~xG"
)

Как это устроено

  1. Список всех файлов, соответствующих *_2.*
  2. Удалите суффикс _2 из каждого имени файла (%%~nG), удалив последние 2 символа.
  3. Добавьте оригинальное расширение (%%~xG) к новому имени.
  4. Переименуйте файл.

Контрольные примеры

__2.bin --> _.bin
abc_def_2.txt --> abc_def.txt
2014_02_23_2.log --> 2014_02_23.log

дальнейшее чтение

1

Вы можете попробовать это как маленький .cmd:

@echo off
setlocal enabledelayedexpansion

for %%a in (*_2.*) do (
set fnm=%%a
echo ren !fnm! !fnm:_2.=.!
)

который, кажется, делает то, что вы ожидаете (уберите эхо-сигнал, если выполняется тестовый прогон)

Я просто вижу возможную проблему, если у вас есть несколько _2. в имени файла

РЕДАКТИРОВАТЬ : заменил неполное предложение в соответствии с предложением

0

Вот как вы можете сделать это в PowerShell (это одна строка, поэтому обязательно прокрутите вправо):

gci PATH\TO\YOUR\FOLDER\ | ? {!$_.PSIsContainer -and $_.BaseName.EndsWith("_2")} | ren -NewName {("{0}{1}" -f $_.BaseName.Substring(0, $_.BaseName.Length-2), $_.Extension)}

gci - это псевдоним Get-ChildItem - введите путь к вашей папке здесь. Если у вас есть подпапки, добавьте -Recurse после пути

? это псевдоним Where-Object - здесь мы перебираем элементы и проверяем, что это НЕ папка, а ее имя оканчивается на "_2" (исключая расширение файла).

ren - Rename-Item - наконец, мы переименовываем файлы, которые прошли фильтр Where-Object. Используя Substring, мы просто обрезаем два последних символа имени файла.

0

Это должно быть сделано в предположении, что шаблоны действительно _2.* не _2*.* (Ничего после цифры 2), и в названии есть только одно подчеркивание, как правильно указывал and31415 - так как он удалит все из _ (подчеркивание) до расширения

for %i in (*_2.*) do (@for /f "delims=_ tokens=1" %j in ("%~ni") do @echo ren "%i" "%j%~xi")

Пожалуйста, обратите внимание:
- это одна строка, так как запускается прямо из командной строки
- теперь только выводит (выводит) команду ren на консоль. После того, как вы убедились , что он будет работать правильно, удалите @echo чтобы он действительно переименовал файлы.

0

Вот одна строка для выполнения этого с помощью Take Command от JP Software, интерпретатора команд, чья команда REN поддерживает регулярные выражения:

ren ::(.*)_2\.(.*) ::\1.\2

дальнейшее чтение

  • JP Software. РЕН. Возьмите Command / TCC Help.
-1

Я не знаю действительно быстрого и грязного способа сделать это.

Но как насчет передачи пустого списка каталогов в файл TXT. Загрузите файл в электронную таблицу и создайте формулы для создания команд переименования. Затем вы можете скопировать команды переименования в качестве значений и вставить их в пакетный файл, который можно запустить для переименования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .