2010-09-27 121 views
15

Desidero rinominare un numero elevato di file all'interno di una cartella su un sistema WinXP, preferibilmente utilizzando un file batch.Come posso creare un file batch per rinominare un numero elevato di file in una cartella?

I file sono attualmente chiamati in questo modo:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

E mi piacerebbe per cambiarli a:

dicembre 001.jpg
bre 002.jpg
dicembre 003.jpg

Come posso eseguire questa operazione ??

+0

È possibile, come [XYplorer] (http://www.xyplorer.com/), che ho usato per pochi anni, fino a quando non ho smesso di usare Windows a casa. Ha un'interfaccia di ridenominazione batch per gestire questa situazione senza programmazione, e vale la pena, tutto intorno. –

+1

@Roger Anche Bulk Rename Utility (http://www.bulkrenameutility.co.uk) è uno strumento molto valido ed è gratuito. – bluish

risposta

9
dir /b *.jpg >file.bat 

Questo vi darà le linee come ad esempio:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

Modifica file.bat nella vostra favorite Windowstext-editor, equivalente a:

s/Vacation2010(.+)/rename "&" "December \1"/ 

Questo è un regex; molti editor li supportano, ma nessuno che viene predefinito con Windows (per quanto ne so). È anche possibile ottenere uno strumento da riga di comando come sed o perl che può prendere la sintassi esatta che ho sopra, dopo l'escape per la riga di comando.

Le linee risultanti sarà simile:

rinomina "Vacation2010 001.jpg" "December 001.jpg"
rinomina "Vacation2010 002.jpg" "December 002.jpg"
rinomina "Vacation2010 003.jpg "" Dicembre 003.jpg "

È possibile riconoscere queste righe come comandi di rinomina, uno per file dall'elenco originale. ;) Esegui il file batch in cmd.exe.

+1

Questo flag/b su dir è incredibilmente utile, non è vero? –

+0

@Jim: non tanto utile quanto * ls * sotto cygwin! :) anche la directory/s è sottovalutata. –

+3

È orribile che un sistema operativo abbia bisogno di un trucco del genere per rinominare semplicemente un insieme di file, non è vero? – bluish

6

è possibile farlo facilmente senza modifica manuale o utilizzando editor di testo di fantasia. Ecco un vbscript.

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFolder="c:\test" 
Set objFolder = objFS.GetFolder(strFolder) 
For Each strFile In objFolder.Files 
    If objFS.GetExtensionName(strFile) = "jpg" Then  
     strFileName = strFile.Name 
     If InStr(strFileName,"Vacation2010") > 0 Then   
      strNewFileName = Replace(strFileName,"Vacation2010","December") 
      strFile.Name = strNewFileName 
     End If 
    End If 
Next 

Salva con nome myscript.vbs e

C:\test> cscript //nologo myscript.vbs 
23
@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET old=Vacation2010 
SET new=December 
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
    SET newname=%%f 
    SET newname=!newname:%old%=%new%! 
    move "%%f" "!newname!" 
) 

Quello che fa è che loop su tutti i file .jpg nella cartella in cui si trova il file batch e sostituisce il Vacation2010 a dicembre all'interno i nomi dei file.

+0

Per rinominare solo i file selezionati, possiamo specificare i nomi dei file come AB.jpg, ABC.jpg, ABCD.jpg in questo modo? –

1
@ECHO off & SETLOCAL EnableDelayedExpansion 

SET "_dir=" REM Must finish with '\' 
SET "_ext=jpg" 
SET "_toEdit=Vacation2010" 
SET "_with=December" 
FOR %%f IN ("%_dir%*.%_ext%") DO (
    CALL :modifyString "%_toEdit%" "%_with%" "%%~Nf" fileName 
    RENAME "%%f" "!fileName!%%~Xf" 
) 
GOTO end 

:modifyString what with in toReturn 
    SET "__in=%~3" 
    SET "__in=!__in:%~1=%~2!" 
    IF NOT "%~4" == "" (
     SET %~4=%__in% 
    ) ELSE (
     ECHO %__in% 
    ) 
    EXIT /B 

:end 

Questo script consente di modificare il nome di tutti i file che contengono Vacation2010 con lo stesso nome, ma con December invece di Vacation2010.

Se si copia e incolla il codice, è necessario salvare lo .bat nella stessa cartella delle foto. Se si desidera salvare lo script in un'altra directory [E.G. hai una cartella preferita per le utilità] devi cambiare il valore di _dir con il percorso delle foto.

Se si deve fare lo stesso lavoro per altre foto [o altri file changig _ext] è necessario modificare il valore della _toEdit con la stringa che si desidera cambiare [o eliminare] e il valore della _with con la stringa vuoi mettere invece di _toEdit [SET "_with=" se vuoi semplicemente cancellare la stringa specificata in _toEdit].

0

Non avete bisogno di un file batch, basta fare questo da PowerShell:

powershell -C "gci | % {rni $_.Name ($_.Name -replace 'Vacation2010', 'December')}" 
Problemi correlati