¿Cómo puedo eliminar todos los últimos 10 caracteres de un grupo de archivos?

0

¿Cómo puedo cambiar el nombre de un grupo de archivos como

admin_ball_126608454.gma
another_thing_384157357.gma

a

ds_126608454.gma
ds_384157357.gma
14anthony7095
fuente

Respuestas:

0

Podrías probar este script. Se le solicita cada vez que se va a cambiar el nombre de un archivo. Puede eliminar este comportamiento eliminando la cláusula IF..ELSE del script. La solicitud se agregó para garantizar que no renombra accidentalmente carpetas o renombra archivos con un nombre incorrecto

@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
Dhiwakar Ravikumar
fuente
3

Puedes usar substring o regex. Agregue -whatifpara realizar una prueba de funcionamiento, pero sin cambiar nada. Estoy seguro de que hay muchas más formas de hacer esto en PowerShell

Subcadena

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 una búsqueda anticipada (?= ) para unir todo ^.?antes de los últimos 10 caracteres.{10}

Regex utilizando grupos de captura

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

Usamos dos grupos de captura (...)(...) y solo conservamos el segundo $2. Aquí tienes que usar en 'lugar de"

nixda
fuente