Come rinominare 80.000 file contemporaneamente in Windows


8

Ho 80.000 file in una cartella e devo rinominarli tutti

filename.jpg

per

._filename.jpg

in ambiente Windows, suppongo da DOS. Il motivo è che ho compresso questi file in tar.gz da unix e copiati in Windows e per qualche ragione i nomi dei file sono cambiati.

Potresti dirmi qual è il comando per farlo? Grazie

Risposte:


3

Puoi usare il comando integrato renameoren :

ren *.jpg ._*.jpg

Tuttavia, come per tutte queste cose, provalo su una directory contenente prima solo pochi file.


1
Mi piace il tuo approccio, ma ho 2 problemi: (1) le prime lettere dei nomi dei file vengono sostituite. In altri termini, "._" non viene aggiunto all'inizio ma sostituisce le prime 2 lettere. (2) "._" in realtà non funziona. Se uso, ad esempio "__", allora funziona. Penso che il punto "." presenta alcuni problemi
aneuryzm,

@Patrick - Devo ammettere che non ho avuto la possibilità di testarlo completamente, e sì penso che tu abbia ragione sul punto che causa problemi.
ChrisF,

Questo non è corretto e non è a causa dei punti. renpuò sostituire solo il testo con testo della stessa lunghezza. Ad esempio, se hai file file1.txte file2.txt, ren file*.txt blah*.txtfa quello che ti aspetti (ora hai file blah1.txte blah2.txt). Tuttavia, se si digita poi ren blah*.txt myfile*.txtle bombe di comando fuori perché rinomina blah1.txta myfile.txt(non myfile1.txt) e quindi non può cambiare titolo blah2.txtal myfile.txtperché questo file esiste già.
David Richerby,

15

Ecco un modo usando PowerShell:

Passare alla cartella ed eseguire questo comando

Get-ChildItem *.jpg | Rename-Item -newname {"._" + $_.Name}

Versione breve bonus extra:

gci *.jpg | ren -newname {"._" + $_.Name}

6

Ho 2 soluzioni:

  1. Tutti i file si trovano nella stessa cartella

    • eseguire quanto segue dal prompt dei comandi su quella cartella:

      for /f "delims=¯" %i in ('dir /b /on') do ren "%i" "._%i"
      
  2. soluzione completa quando ci sono file nelle sottocartelle E quando si desidera sostituire i primi "n" caratteri con una stringa desiderata: D

    • creare un file batch con il seguente comando
    • cambia i parametri variabili in quello che vuoi
      • path: inserisci ""il percorso principale dei tuoi file (ad es. "C: \ documenti e impostazioni \ utente \ desktop \ nuova cartella"
      • numfirstchars2replace: inserisci un numero con i primi caratteri da sostituire (nel tuo caso, 2)
      • str2put: inserisci una stringa da aggiungere come prefisso del nuovo nome file (nel tuo caso, ._)
    • eseguirlo in una cartella diversa da dove si trovano i file


@echo off

::only to tell user what this bat are doing
echo.1.initializing...

::enable that thing to allow, for example, incremental counter in a for loop :)
echo.- EnableDelayedExpansion
SETLOCAL EnableDelayedExpansion

::variables
echo.- variables
:: - place here the absolute root path of your files
set path="put here where are the root folder of your files"
set pathbak=%cd%
set numfirstchars2replace=2
set str2put=._

::go to %path% and its driveletter
echo.- entering the path you want
for /f "delims=¯" %%i in ('echo.%path%') do %%~di
cd %path%

::search all subfolders and save them to a temp file
echo.- searching for subfolders
echo.%path%>%temp%\tmpvar.txt
for /f "delims=¯" %%i in ('dir /s /b /on /ad') do echo."%%i">>%temp%\tmpvar.txt

::execute command for root folder and all found subfolders
echo.
echo.2.executing...
for /f "delims=¯" %%i in (%temp%\tmpvar.txt) do (
  cd %%i
  echo.- in folder: %%i
  for /f "delims=¯" %%j in ('dir /b /on /a-d') do (
    set newname=%%j
    set newname=!newname:~%numfirstchars2replace%,1000!
    echo.- renaming from "%%j" to "%str2put%!newname!"...
    ren "%%j" "%str2put%!newname!"
  )
)

echo.
echo.3.exiting...
::return to %pathbak% and its driveletter
for /f "delims=¯" %%i in ('echo.%pathbak%') do %%~di
cd %pathbak%

@echo on

completamente testato :) risolve il problema, anche con alcune specifiche fornite nel commento @ChrisF. nota: in "delims = ¯", se "¯" è usato in un nome di file, cambia "¯" con un altro carattere che sai che non è usato nei nomi dei file
kokbira,

votato a causa della tua sceneggiatura incredibilmente lunga per fare semplicemente un loop e rinominare sth. :)
wullxz,

bene, giustamente, potrei creare un ciclo "for / f" con tutti i file ordinati per nome e poi rinominarli in "._lenameX.jpg" con X come numero dell'ordine, ma ho pensato in un modo di farlo per altri casi - se in futuro appare un problema simile, qualcuno può modificare alcuni comandi ...
kokbira il

puoi usare "delims =" invece di "delims = ¯" (ho dimenticato che: D). inoltre puoi usare for / f al posto di for / f "delims =" perché fa quello che voglio in quel caso ...
kokbira,

3

Se sono tutti nella stessa cartella, è possibile selezionarli tutti con Control+ Ae quindi premere F2per rinominarne uno. Tutti i file successivi saranno denominati file (2), file (3), ecc


3

Prova Powershell (preinstallato in Windows 7):

Get-Childitem /path/to/your/files | foreach-object { move-item $_ $("._" + $_.name) }

(testato nel mio download-dir.)

Modifica : il codice di Siim K aggiungerà un ulteriore ".jpg" a ogni "._filename.jpg". Rimuovi l'ultimo ".jpg" nel codice di Siim K e avrai un codice breve ed elegante per rinominare i tuoi file.


grazie, aggiornato. Riutilizzato il codice da un comando di ridenominazione simile che ha richiesto la manipolazione dell'estensione e non l'ha notato.
Siim K,


0

Ho sempre trovato Flash Renamer un buon strumento per rinominare i file in batch.

Ha versioni di prova e complete ($ 20) e può rinominare i file in base a metadati - molto utile per rinominare i file MP3 per i quali lo uso principalmente.


0

Se stai cercando un modo intuitivo per rinominare in blocco potresti provare lo strumento gratuito Ant Renamer , c'è un enorme elenco di azioni che puoi intraprendere e ti dà anche una comoda anteprima prima di fare qualsiasi ridenominazione. Lo uso molto quando faccio casino con la mia libreria di musica, foto o video.


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.