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.
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.
Risposte:
È 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"
)
*_2.*
._2
suffisso da ciascun nome di file ( %%~nG
) rimuovendo gli ultimi 2 caratteri.%%~xG
) al nuovo nome.__2.bin --> _.bin
abc_def_2.txt --> abc_def.txt
2014_02_23_2.log --> 2014_02_23.log
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
2014_02_23_2.log
. Se rimuovi tutto _2
sostituendolo con una stringa vuota, finiresti con un file chiamato 2014_023.log
. Non proprio quello che voleva l'OP.
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.
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 @echo
per farlo rinominare i file.
abc_def_2.txt
. Quindi il tuo codice lo rinominerebbe in abc.txt
, che non è il risultato previsto.
Ecco il one-liner per farlo con Take Command di JP Software , un interprete di REN
comandi il cui comando supporta espressioni regolari:
ren ::(.*)_2\.(.*) ::\1.\2
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.