2010-09-27 19 views
15

Me gustaría cambiar el nombre de una gran cantidad de archivos dentro de una carpeta en un sistema WinXP, preferiblemente usando un archivo por lotes.¿Cómo creo un archivo por lotes para cambiar el nombre de una gran cantidad de archivos en una carpeta?

Los archivos actualmente se nombran así:

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

Y me gustaría cambiar a:

Diciembre 001.jpg
De ciembre 002.jpg 003.jpg
diciembre

¿Cómo puedo realizar esta operación ??

+0

Es posible que como [XYplorer] (http://www.xyplorer.com/), que utilicé para unos pocos años, hasta que dejé de usar Windows en casa. Tiene una interfaz de cambio de nombre por lotes para manejar esta situación sin programación, y vale la pena el costo, todo alrededor. –

+1

@Roger También Bulk Rename Utility (http://www.bulkrenameutility.co.uk) es una herramienta muy buena y es gratuita. – bluish

Respuesta

9
dir /b *.jpg >file.bat 

Esto le dará líneas tales como:

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

Editar file.bat en su favorite Windowstext-editor, haciendo el equivalente de:

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

Eso es un regex; muchos editores los soportan, pero ninguno viene predeterminado con Windows (hasta donde yo sé). También puede obtener una herramienta de línea de comandos, como sed o perl, que puede tomar la sintaxis exacta que tengo arriba, después de escaparse para la línea de comando.

Las líneas resultantes se verá como:

de cambio de nombre "Vacation2010 001.jpg" "001.jpg December"
de cambio de nombre "002.jpg Vacation2010" "002.jpg December"
de cambio de nombre "Vacation2010 003.jpg "" Diciembre 003.jpg "

Puede reconocer estas líneas como comandos de renombrado, uno por archivo de la lista original. ;) Ejecutar ese archivo por lotes en cmd.exe.

+1

Ese/b flag to dir es increíblemente útil, ¿no? –

+0

@Jim: ¡No es tan útil como * ls * en virtud de cygwin! :) dir/s también se subestima. –

+3

Es orrible que un sistema operativo necesite tal truco para simplemente cambiar el nombre de un conjunto de archivos, ¿no es así? – bluish

6

puede hacerlo fácilmente sin edición manual o usando editores de texto de fantasía. Aquí hay 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 

guardar como myscript.vbs y

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!" 
) 

Lo que esto hace es que los bucles sobre todos los archivos .jpg en la carpeta donde se encuentra el archivo por lotes y sustituye a la Vacation2010 a diciembre en el interior los nombres de archivo.

+0

Para cambiar el nombre solo a los archivos seleccionados, ¿podemos especificar nombres de archivo como AB.jpg, ABC.jpg, ABCD.jpg así? –

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 

Este script le permite cambiar el nombre de todos los archivos que contienen Vacation2010 con el mismo nombre, pero con December en lugar de Vacation2010.

Si copia y pega el código, debe guardar el .bat en la misma carpeta de las fotos. Si desea guardar el script en otro directorio [E.G. tiene una carpeta favorita para las utilidades] tiene que cambiar el valor de _dir con la ruta de las fotos.

Si usted tiene que hacer el mismo trabajo para otras fotos [u otros archivos changig _ext] usted tiene que cambiar el valor de _toEdit con la cadena que desea cambiar [o borrar] y el valor de _with con la cadena que desea poner en lugar de _toEdit [SET "_with=" si simplemente desea borrar la cadena especificada en _toEdit].

0

No es necesario un archivo por lotes, acaba de hacer esto desde powershell:

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