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.txt
en 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