2009-06-22 16 views
12

Por lo tanto, tengo un montón de archivos sin extensión. Quiero escribir un script por lotes de Windows que:Buscar y renombrar archivos sin extensión?

  1. Buscar archivos sin extensión (en una carpeta especificada)
  2. Añadir .bla al final del nombre de archivo

estoy tal nodo de script de lotes de Windows ni siquiera sé por dónde empezar. Sugerencias?

Respuesta

25

Para archivos por lotes de Windows, esto va a renombrar sólo archivos sin extensión a la extensión .bla:

rename *. *.bla 

Aviso el primer argumento es una estrella y un punto: *.

El segundo argumento es: * .bla

El punto de inicio combinación representa archivos sin extensiones en este contexto (*.).

Antes:

06/21/2009 11:57 PM     6 test 
06/21/2009 11:57 PM     7 test.exe 
06/21/2009 11:57 PM     7 test2 

Después:

06/21/2009 11:57 PM     6 test.bla 
06/21/2009 11:57 PM     7 test.exe 
06/21/2009 11:57 PM     7 test2.bla 

Nota adicional: La línea de comandos contrario sería cambiar el nombre de todos los archivos en .bla no hay archivos de extensiones.

EDITAR:

Para el cambio de nombre forma recursiva archivos sin extensión a través de subdirectorios (no admite espacios en los caminos):

@echo off 
FOR /F %%i in ('dir /b/s/A-d') DO (
    if "%%~xi" == "" rename "%%~fi" "%%~ni.bla" 
) 

Edit2:

Para cambiar el nombre de archivos de forma recursiva sin extensión en los subdirectorios (admite espacios en la ruta):

@echo off 
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
    if "%%~xi" == "" rename "%%~fi" "%%~ni.bla" 
) 
+0

Lo consideré, pero ni siquiera hay un punto al final del nombre ... ¿seguirá funcionando? – Alan

+0

Además, ¿cómo incluiría subcarpetas? – Alan

+0

@ Alan - Sí, funcionará, ¿y de cuántas subcarpetas estamos hablando? – JFV

5

Para hacer esto en subdirectorios utilizar este:

for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla 

si está usando esto en un archivo por lotes, es necesario duplicar el '%'

for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla 

edición:

y si tiene espacios en los nombres de su directorio, puede probar esto (versión por lotes):

for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla" 
+0

¡agradable! (Límite de 15 caracteres) –

+0

Problema menor aquí: no funciona para directorios con espacios ... de lo contrario, se verá bien – Alan

6

Aquí hay otro comando posible cambiar el nombre de archivos sin extensiones de forma recursiva (suponiendo que las rutas de archivos no contienen espacios):

for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla" 

versión por lotes (con duplicado %):

@echo off 
for /f %%i in ('dir *. /b /s /a-d') do (
    rename "%%~fi" "%%~ni.bla" 
) 


Si los nombres de archivos o carpetas contienen espacios, utilice esta c ommand lugar:

for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla" 

versión de lote:

@echo off 
for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
    rename "%%~fi" "%%~ni.bla" 
) 

Editar: aquí es aún más corto de una sola línea que soporta espacios en los caminos: la versión

for /r %i in (*.) do ren "%~fi" "%~ni.bla" 

lotes:

@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla" 
Cuestiones relacionadas