Automazione della ridenominazione in batch * _2. * TO *. *


1

sono in procinto di rinominare più file da _2. a . Voglio rimuovere il suffisso "_2"

La mia prima soluzione alternativa ci sta provando

   ren *_2.* *.*

Ma questo non funziona. L'aiuto è dedicato.


Di quanti file hai bisogno di rinominare? Hanno tutta la larghezza di vendita in termini di numero di caratteri?
Jim,

Circa 1000 file e hanno un numero diverso di personaggi
M. Abdelhafid,

Risposte:


2

Soluzione

È possibile utilizzare questo script batch:

@echo off
setlocal enabledelayedexpansion

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

Come funziona

  1. Elenca tutti i file corrispondenti *_2.*.
  2. Rimuovi il _2suffisso da ciascun nome di file ( %%~nG) rimuovendo gli ultimi 2 caratteri.
  3. Aggiungi l'estensione originale ( %%~xG) al nuovo nome.
  4. Rinomina il file.

Casi test

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

Ulteriori letture


1

Potresti provare questo come un po '.cmd:

@echo off
setlocal enabledelayedexpansion

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

che sembra fare quello che ti aspetti (rimuovi l'eco se soddisfatto dall'esecuzione del test).

Vedo solo un possibile problema se ne hai diversi _2.nel nome file

EDIT : sostituita proposta incompleta come da suggerimento


La sostituzione di una sottostringa può dare effetti collaterali indesiderati. Supponiamo che tu abbia un file chiamato 2014_02_23_2.log. Se rimuovi tutto _2sostituendolo con una stringa vuota, finiresti con un file chiamato 2014_023.log. Non proprio quello che voleva l'OP.
and31415,

Devo risolverlo, dato che ovviamente sono "fuori risposta" con batch migliori?
FredP,

La risposta in sé non è del tutto errata, ma dovresti migliorarla elaborando un po 'di più, aggiungi qualche avviso e possibilmente fornendo un codice di esempio funzionante.
and31415,

0

Ecco come è possibile farlo in PowerShell (è una riga, quindi assicurati di scorrere verso destra):

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

gci è un alias di Get-ChildItem - inserisci qui il percorso della tua cartella. Se hai delle sottocartelle, aggiungi -Recurse dopo il percorso

? è un alias di Where-Object: qui eseguiamo il ciclo tra gli elementi e controlliamo che NON sia una cartella e il suo nome finisca con "_2" (esclusa l'estensione del file).

ren - Rename-Item - finalmente rinominiamo i file che hanno passato il filtro Where-Object. Usando Sottostringa abbiamo appena tagliato gli ultimi due caratteri del nome file.


0

Questo dovrebbe farlo, supponendo che gli schemi siano realmente _2.*e non _2*.*(niente dopo la cifra 2) e che ci sia un solo carattere di sottolineatura nel nome come indicato correttamente da e31415 - poiché rimuoverà qualsiasi cosa da _(carattere di sottolineatura) fino all'estensione

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

Nota:
- è una riga, come eseguita direttamente dalla riga di comando
- ora fa eco solo (stampa) al comando ren sulla console. Dopo aver verificato che funzionerà correttamente, rimuovilo @echoper farlo rinominare i file.


Supponiamo che venga chiamato un file abc_def_2.txt. Quindi il tuo codice lo rinominerebbe in abc.txt, che non è il risultato previsto.
and31415,

@ and31415 sì, buona cattura - divertente, l'ho appena notato e stavo per aggiungere un avvertimento :-)
wmz,

0

Ecco il one-liner per farlo con Take Command di JP Software , un interprete di RENcomandi il cui comando supporta espressioni regolari:

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

Ulteriori letture

  • JP Software. REN . Accetta Command / TCC Help.

-1

Non conosco un modo davvero rapido e sporco di farlo.

Ma che ne dici di reindirizzare un elenco di directory nude a un file TXT. Carica il file in un foglio di calcolo e crea una formula per creare i comandi di rinomina. Quindi è possibile copiare i comandi di ridenominazione come valori e incollarlo in un file batch che può essere eseguito per eseguire le ridenominazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.