Como posso remover todos os últimos 10 caracteres em um grupo de arquivos?

0

Como posso renomear um grupo de arquivos como

admin_ball_126608454.gma
another_thing_384157357.gma

para

ds_126608454.gma
ds_384157357.gma
    
por 14anthony7095 26.12.2014 / 04:17

2 respostas

0

Você pode tentar este script. Ele avisa sempre que um arquivo está prestes a ser renomeado. Você pode eliminar esse comportamento removendo a cláusula IF..ELSE do script. O prompt foi adicionado para garantir que você não renomeie acidentalmente pastas ou renomeie arquivos com qualquer nome errado

@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
    
por 26.12.2014 / 07:25
2

Você pode usar substring ou regex. Anexe -whatif para fazer um teste - mas sem alterar nada. Tenho certeza de que há muito mais maneiras de fazer isso no PowerShell

Substring

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

Regex usando lookahead

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

Usamos um lookahead (?= ) para corresponder a tudo ^.? antes dos últimos 10 caracteres .{10}

Regex usando grupos de captura

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

Usamos dois grupos de captura (...)(...) e mantemos apenas o segundo com $2 . Aqui você tem que usar ' em vez de "

    
por 26.12.2014 / 06:24