comandos-consola-utiles

Comandos Windows para gestión de archivos y carpetas

Os traigo una recopilación de comandos de terminal de Windows útiles para gestionar ficheros de forma masiva.

Estaba pensando llamar a la entrada “comandos para creadores de contenido”, porque principalmente yo los uso para el blog. Pero lo cierto es que algunos son útiles también para programadores y desarrolladores.

En cualquier caso, aquí dejo un chuletario algunos comandos útiles para gestionar múltiples ficheros y carpetas en Windows, y otras operaciones que necesito hacer de vez en cuando.

Con un simple comando puedes ahorrar mucho tiempo. También te puede evitar tener que hacerte un programa o un script sólo para resolverte un problema. ¡Consola de comandos al poder!

Por supuesto, podéis modificarlos o parametrizarlos según vuestras necesidades. E, incluso, proponedme alguno si os parece interesante. Si se me ocurre alguno más, ya los iré añadiendo por aquí.

Listas ficheros o carpetas

Empezamos por el comando dir y algunos de sus parámetros disponibles (hay más, usad dir /? para ver todos.

# listar ficheros y carpetas
dir

# mostrar solo ficheros con una extensión (ext en el ejemplo)
dir *.ext

# mostrar todos los tipos de elementos (también junctions, por ejemplo)
dir /a

# mostrar sin encabezado
dir /b

# mostrar de forma recursiva (en carpeta actual y subcarpetas)
dir /b

# mostrar ordenados (s por tamaño, e por extension, d por fecha)
dir /o s 

Y ahora veamos algunos ejemplos más elaborados.

Listar ficheros a un archivo de texto

Si queréis guardar un fichero de texto con la información lanzada por dir simplemente tenéis que usar el operador >

dir > output.txt

Recordar que podéis jugar con los parámetros que hemos visto antes, por ejemplo para listar únicamente un tipo de ficheros, o ordenar por fecha, etc.

Obtener una representación visual de ficheros

Para obtener una representación visual en caracteres ASCII de un árbol de carpetas y ficheros, podemos usar el comando tree. Muy útil para hacer documentación, o para explicar algo en un email etc.

Si únicamente queremos la estructura de carpetas hacemos,

tree folder

Que nos devolvería esto

folder
├───folder A
│   └───subfolder A1
└───folder B

Y si además queremos los ficheros, hacemos

tree my_folder /f

Que nos devolvería

my_folder
│   file 0.txt

├───folder A
│   │   file A.txt
│   │
│   └───subfolder A1
│           file A1.txt

└───folder B
        file B.txt

Comandos para crear carpetas o ficheros

Nuevamente empecemos por los comandos básicos, recordando cómo crear un fichero o una carpeta vacíos.

# crear fichero vacio
echo. > nombre_archivo.txt

# crear carpeta
mkdir nombre_carpeta

Y ahora vamos a por ejemplos más complicados.

Crear secuencia de carpetas o ficheros

Para crear carpetas o archivos en secuencia numérica, por ejemplo las carpetas numeradas desde “hola 0” hasta “hola 10”.

📁my-folder/
  ├─📄01 hola/
  ├─📄02 hola/
  ├─📄03 hola/
  └─📄04 hola/

Podemos usar este comando para crear ficheros 📄

for /L %i in (0, 1, 10) do echo. > "%i hola.md"

O la versión equivalente para carpetas 📁

for /L %i in (0, 1, 10) do mkdir "%i hola"

El bucle for /L es especialmente útil cuando necesitas generar un gran número de carpetas de forma automatizada.

Crear ficheros o carpetas según un fichero de texto

Ahora supongamos que tienes un fichero de texto una lista de nombres, y quieres convertir cada uno en un fichero o carpeta.

📄fichero.txt   -->  📁my-folder/
                      ├─ 📄linea01.md
                      ├─ 📄linea02.md
                      ├─ 📄linea03.md
                      └─ 📄linea04.md

Podemos hacerlo con este comando para ficheros 📄

for /f "tokens=*" %i in (fichero.txt) do echo. > "%i.md"

O este otro para carpetas 📁

for /f "tokens=*" %i in (fichero.txt) do mkdir "%i.md"

Crear carpetas y mover archivo dentro

Una necesidad algo más rara, pero que yo tengo un montón de veces. Coger cada uno los ficheros de una carpeta, hacer una carpeta que se llame igual, y mover el fichero dentro.

📁my-folder/               📁my-folder/  
  ├─ 📄fichero01.md   -->    ├─ 📁fichero01/📄fichero01.md
  ├─ 📄fichero02.md          ├─ 📁fichero02/📄fichero02.md
  └─ 📄fichero03.md          └─ 📁fichero03/📄fichero03.md

Podemos conseguirlo con este comando.

for %i in (*) do mkdir "%~ni" && move "%i" "%~ni"

Yo lo uso porque, normalmente, tengo varios ficheros de texto (que son el contenido de las entradas de este blog), y necesito crear una carpeta para cada uno, para añadir las imágenes etc.

Concatenar varios ficheros de texto

Si tenemos una carpeta con varios ficheros de texto, y los queremos concatenar en un único fichero, podemos usar este comando

for %i in (*.txt) do type "%i" >> archivo_salida.txt && echo. >> arc
hivo_salida.txt && echo. >> archivo_salida.txt

Podéis cambiar el tipo de fichero que queréis concatenar (.md, .bat, lo que sea), y el nombre del fichero.

Si además queréis añadir en el fichero concatenado, el nombre del fichero original, y luego su contenido, podemos cambiar el comando así.

for %i in (*.txt) do echo %i% >> archivo_salida.txt && type "%i" >> archivo_salida.txt && echo. >> arc
hivo_salida.txt && echo. >> archivo_salida.txt

Comandos para copiar o mover archivos

Nuevamente, empezamos por lo básico, viendo cómo copiar o mover un fichero.

# copiar archivos a otro directorio
copy archivo_origen directorio_destino

# mover o renombrar ficheros o directorios
move archivo_origen archivo_destino

Y ahora vamos a por casos más complicados. En muchos casos podréis usar copiar o mover, en función de lo que necesitéis.

Copiar un archivo a varias carpetas

Ahora queremos copiar un mismo fichero en todas las carpetas de un directorio carpetas. Por ejemplo, imagina que quieres copiar un fichero readme.txten tropecientas carpetas

📁my-folder-A/    -->    📁my-folder-B/
  ├─ 📁folder01            ├─ 📁folder01/📄readme.txt
  ├─ 📁folder02            ├─ 📁folder02/📄readme.txt
  ├─ 📁folder03            ├─ 📁folder03/📄readme.txt
  └─ 📁folder04            └─ 📁folder04/📄readme.txt

Podemos hacerlo con un único comando

for /D %a in (*) do (xcopy /Y readme.txt "%a\")

Este comando utiliza un bucle for /D para recorrer todos los directorios en el directorio actual y copiar el archivo “readme.txt” a cada uno de ellos.

Copiar carpetas sin los archivos

A veces, solo deseas duplicar la estructura de carpetas sin los archivos. Puedes lograrlo con estos comandos:

📁my-folder-A/               ->    📁my-folder-B/
  ├─ 📁folder01/📄files.*            ├─ 📁folder01/❌empty
  ├─ 📁folder02/📄files.*            ├─ 📁folder02/❌empty
  ├─ 📁folder03/📄files.*            ├─ 📁folder03/❌empty
  └─ 📁folder04/📄files.*            └─ 📁folder04/❌empty

Podemos conseguirlo con el siguiente comando,

xcopy path_source path_destination /t

O con este, si queremos también carpetas y todas sus subcarpetas

xcopy path_source path_destination /t /e

Renombrar ficheros

Vamos con el grupo de renombrar ficheros. Empezamos recordando cómo renombrar un archivo

ren path_file new_name

Añadir prefijo a varios ficheros archivos

Una de las peticiones más normales, añadir un prefijo o un sufijo a todos los ficheros de una carpeta.

📁my-folder/               📁my-folder/  
  ├─ 📄fichero01.md   -->    ├─ 📄prefix - fichero01.md
  ├─ 📄fichero02.md          ├─ 📄prefix - fichero02.md
  └─ 📄fichero03.md          └─ 📄prefix - fichero03.md

Este comando agrega el prefijo “prefix - ” a todos los archivos en el directorio actual. Puedes personalizar el prefijo según tus necesidades.

for %a in (*.*) do ren "%a" "prefix - %a"

De forma similar, añadir un sufijo sería así

for %a in (*.*) do ren "%a" "%a - sufix"

Por supuesto puede modificar el (*.*) para filtrar un tipo de archivos. Por ejemplo, solo ficheros .jpg, etc

Renombrar archivos en carpetas recursivo

Otro ejemplo, tienes que renombrar un fichero en una serie de carpetas, y recursivo en todas sus subcarpetas.

📁my-folder/                         📁my-folder/  
  ├─ 📁folder01/📄readme.txt   -->    ├─ 📁folder01/📄readme.md
  ├─ 📁folder02/📄readme.txt          ├─ 📁folder02/📄readme.md
  └─ 📁folder03/📄readme.txt          └─ 📁folder03/📄readme.md

Podemos hacerlo así,

for /R %G in (readme.txt) do ren "%G" "readme.md"

Este comando buscará todos los archivos con el nombre readme.txt de manera recursiva en todos los subdirectorios y los renombrará como “readme.md”.

Eliminar ficheros o carpetas

Finalmente, unos comandos básicos para eliminar ficheros y carpetas.

# Eliminar un fichero
del nombre_fichero

# Eliminar todos los archivos del directorio actual
del /Q /F *.*

# Eliminar directorio
rmdir nombre_directorio

# Eliminar carpetas y todo su contenido de forma recursiva
rmdir /S /Q nombre_directorio