Comando DOS per rinominare con una parte del nome del file originale


4

Ho molti file nominati in questo modo:
YYY.XXXXXX

e ho bisogno di scrivere un comando batch DOS per rinominare in questo modo:
YYYXXXXXX.ZZZ

YYY e ZZZ sono una stringa fissa, solo XXXXXX è variabile.

ha provato questo senza successo:
rename YYY.?????? YYY??????.ZZZ


Benvenuto in Stack Overflow! Che cosa hai provato?

Ho cercato di rinominare come sopra senza successo. Funziona con un nome file di origine senza "." nel mezzo. Potrei trovare una soluzione eliminando il "." nel nome del file

1
James L ha una buona soluzione per il tuo problema. Il comando RENAME da solo non può fare ciò che vuoi. Vedere In che modo il comando RENAME di Windows interpreta i caratteri jolly? per avere un'idea di cosa tu può fare con RENAME.
dbenham

Grazie dbenham, questa è come una miniera d'oro, è già presente nei miei segnalibri :)
ciquta

Risposte:


9

Puoi usare il for dichiarazione per fare questo perché ti dà accesso al nome file e all'estensione separatamente:

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do ren "%i.%j" "%i%j.zzz"

utilizzando tokens=1,2 delims=. fa sì che divida il valore restituito da dir /b yyy.* sul . nel %i e %j variabili, dove %i è il nome del file (o 'yyy'), e %j è l'estensione della variabile (senza il punto iniziale . ).

Utilizzare il comando precedente se si sta digitando direttamente dal prompt dei comandi. Da un file batch, è necessario raddoppiare tutto il % simboli come questo:

for /f "tokens=1* delims=." %%i in ('dir /b yyy.*') do ren "%%i.%%j" "%%i%%j.zzz"

Assicurati di eseguire questo comando dalla cartella in cui sono presenti tutti yyy.xxxxxx i file risiedono.


+1 - Non riuscivo a capire come ottenere l'estensione senza il punto! Immagino sia per questo che mi piace PowerShell meglio ...
chue x

2
+1, ma meglio da usare "tokens=1*" nel caso in cui XXXXXX contenga .
dbenham

@ Dbenham: buona cattura, tokens=1* è molto meglio.
James L.

Questa risposta avrebbe dovuto essere accettata, forse dai moderatori, perché in realtà è eccellente.
mins

0

Proprio come un punto, prima di provare a usare ren o qualsiasi altro comando, prima prova a echo per vedere cosa si farebbe, quindi anziché:

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do ren "%i.%j" "%i%j.zzz"

Prima fai (per vedere quali comandi dovrebbero essere eseguiti):

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do @(echo ren "%i.%j" "%i%j.zzz")

Dopo che l'output mostra che i comandi sono quello che vuoi, basta rimuovere il echo.

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.