Pregunta

Entonces, tengo un montón de archivos sin extensión. Quiero escribir un script por lotes de Windows que:

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

Soy un novato de script por lotes de Windows que ni siquiera sé por dónde empezar. ¿Sugerencias?

¿Fue útil?

Solución

Para archivos por lotes de Windows, esto cambiará el nombre de los archivos sin extensión a la extensión .bla:

rename *. *.bla

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

El segundo argumento es: * .bla

La combinación de punto de inicio (*.) 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 opuesta cambiaría el nombre de todos los archivos .bla a archivos sin extensión.

EDITAR :

Para renombrar archivos de forma recursiva sin extensión en subdirectorios (no admite espacios en las rutas):

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

EDIT2:

Para renombrar archivos de forma recursiva sin extensión entre 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"
)

Otros consejos

Aquí hay otro comando posible para renombrar archivos sin extensiones de forma recursiva (suponiendo que las rutas de archivos no contengan 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 archivo o carpeta contienen espacios , use este comando en su lugar:

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

Versión por lotes:

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

Editar: aquí hay una línea más corta que admite espacios en las rutas:

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

Versión por lotes:

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

para hacer esto en subdirectorios use esto:

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

si está utilizando esto en un archivo por lotes, debe duplicar el '%'

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

edit:

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"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top