Как я могу переименовать группу файлов, как

admin_ball_126608454.gma
another_thing_384157357.gma

в

ds_126608454.gma
ds_384157357.gma

2 ответа2

2

Вы можете использовать подстроку или регулярное выражение. Добавьте -whatif чтобы выполнить тестовый запуск, но ничего не меняя. Я уверен, что есть гораздо больше способов сделать это в PowerShell

Substring

Dir "C:\yourfolder"  | ren -NewName {
    "ds" + $_.basename.substring($_.basename.length-10,10) + $_.extension
} -whatif

Regex используя lookahead

Dir "C:\yourfolder" | ren -NewName {$_.name -replace "^.*(?=.{10}\.)","ds"}

Мы используем прогноз (?= ) чтобы соответствовать всем ^.? до последних 10 символов .{10}

Regex с использованием групп захвата

Dir "C:\yourfolder" | ren -NewName {$_.name -replace '(.*)(.{10}\.)', 'ds$2'}

Мы используем две группы захвата (...)(...) и оставляем только вторую с $2 . Здесь вы должны использовать ' вместо "

0

Вы можете попробовать этот скрипт. Он запрашивает вас каждый раз, когда файл собирается переименовать. Вы можете устранить это поведение, удалив IF.ELSE предложение из сценария. Была добавлена подсказка, чтобы вы случайно не переименовали папки и не переименовали файлы с неправильным именем

@echo off
setlocal EnableDelayedExpansion
SET /P path=Enter the path please :
ECHO The Path entered is %path%. 
CD %PATH%
ECHO Current Directory is %CD%
FOR /R %path% %%G IN (*.*) DO (
SET name=%%~nG
SET last=!name:~-10!
SET/P cho="ECHO File !name!%%~xG will be renamed to ds_!last!%%~xG Do you want to continue (y/n) ?"
IF !cho!==y  (REN "!name!%%~xG" "ds_!last!%%~xG") ELSE (ECHO Not Renamed)
)
pause

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