Automaticé la estructura de archivos con un script de PowerShell

Mi carpeta de Descargas se ha convertido en el Salvaje Oeste. Tengo docenas (bueno, cientos) de archivos diferentes que se acumulan mensualmente. Estos incluyen un montón de capturas de pantalla con nombres genéricos, archivos PDF aleatorios, más archivos ZIP de los que puedo contar e incluso algunos instaladores que tomé pero que nunca ejecuté.

He intentado revisar la acumulación de archivos cada dos semanas, pero parece el tipo de tarea repetitiva y tediosa que mi computadora debería hacer por mí. Entonces, decidí tomarme media hora y escribir un script de PowerShell que pudiera automatizar la estructura de archivos. Me ha ahorrado mucho tiempo desde entonces e incluso lo uso en otros directorios que quiero organizar.

Puedes escribir un script como este en prácticamente cualquier idioma, pero fue natural apelar a PowerShell porque ya está integrado en Windows. Si nunca ha usado PowerShell ni ha creado un script, aún puede ejecutar este con facilidad. Se modifica o amplía fácilmente y puede convertirse en su trampolín para futuros proyectos de scripting.

PowerShell y Windows PowerShell

6 scripts de PowerShell para automatizar y acelerar su flujo de trabajo

Cuando trabaja a través de la CLI, ahorra mucho tiempo. Aquí hay scripts de PowerShell para acelerar su flujo de trabajo.

Deje que PowerShell ordene archivos por tipo

Una alternativa que es tan simple como parece

Es posible que tengas alguna forma exclusivo de organizar tus archivos: por año, por plan, por autor o lo que sea que te funcione. Le recomiendo que traduzca esa estructura a su script de PowerShell. Pero para mis archivos, elegí la que probablemente sea la forma más sencilla de clasificarlos: por tipo de archivo.

Esto funciona perfectamente porque casi todos los archivos (excepto algunos archivos especiales del sistema) en su computadora tienen una extensión de archivo como .txt, .mov, .zip, etc. PowerShell puede repasar la extensión del archivo para determinar fácilmente qué tipo de archivo está manejando y dónde debe moverse. Si la carpeta de destino aún no existe, el script la crea.

Estos son los tipos de archivos para los que he programado mi script:

  • Imágenes: JPG, PNG, GIF, HEIC, DNG, WEBP, AVIF

  • Documentos: DOCX, PDF, TXT, XLSX, CSV

  • Archivos – ZIP, RAR, TAR, GZ, 7Z

  • Ejecutables: EXE, MSI

  • Audio: FLAC, MP3, WAV, AAC

  • Vídeos: MP4, MOV, MKV, AVI

  • Código: PS1, PY, JS, HTML, CSS, SH

  • Varios – Todo lo demás

Estos son los tipos de archivos más comunes en mi sistema, especialmente entre los que terminan en la carpeta Descargas. Es trivial unir más tipos al script si es necesario. Es posible que el paquete normal Misc no sea necesario en su estructura, pero lo incluí para que no queden archivos en la carpeta raíz cuando se ejecuta el script. Quiero que cada archivo esté cuidadosamente empaquetado en una de esas carpetas.

Roba este script y hazlo tuyo

Ejecútelo y observe cómo sucede la ocultismo.

Un script de PowerShell escrito en Notepad++

Aquí está el argumento completo. Todo lo que necesita hacer es pegarlo en un editor de texto como el Bloc de notas o VS Code y guardarlo con un nombre de archivo descriptivo como FileOrganizer.ps1 (Los archivos de script de PowerShell usan .ps1 como extensión).

$targetPath = "$env:USERPROFILEDownloads"

$categories = @{
    Images      = "jpg","jpeg","png","gif","heic","dng","webp","avif"
    Documents   = "docx","pdf","txt","xlsx","csv"
    Archives    = "zip","rar","tar","gz","7z"
    Executables = "exe","msi"
    Audio       = "flac","mp3","wav","aac"
    Videos       = "mp4","mov","mkv","avi"
    Code        = "ps1","py","js","html","css","sh"
}

function Get-Category($ext) {
    $ext = $ext.TrimStart(".").ToLower()
    foreach ($c in $categories.Keys) {
        if ($categories($c) -contains $ext) { return $c }
    }
    "Misc"
}

Get-ChildItem $targetPath -File | ForEach-Object {

    $category = Get-Category $_.Extension
    $destination = Join-Path $targetPath $category

    New-Item -ItemType Directory -Path $destination -Force | Out-Null

    $destFile = Join-Path $destination $_.Name

    if (Test-Path $destFile) {
        $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
        $destFile = Join-Path $destination "$($_.BaseName)_$timestamp$($_.Extension)"
    }

    Move-Item $_.FullName $destFile
}

El script creará los directorios necesarios (por ejemplo, Imágenes, Vídeos) si aún no existen. Tenga en cuenta que solo procesa archivos en el directorio de nivel superior y no tocará directorios preexistentes (no -Recurse bandera). En cuanto a los archivos con nombres de archivo duplicados (es afirmar, la carpeta de destino ya contiene un archivo con el mismo nombre que el que se está moviendo), agregará una marca de tiempo al final para evitar la sobrescritura.

Si nunca ayer ha ejecutado su propio script de PowerShell, primero deberá ejecutar este comando para indicarle a PowerShell que puede ejecutar scripts escritos localmente y aquellos que estén firmados:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

Para ejecutar el script, abrigo PowerShell desde el menú Inicio de Windows, navegue hasta donde almacenó el script y ejecútelo:

cd C:Scripts
.FileOrganizer.ps1

Ensenada su carpeta de Descargas en el Explorador para confirmar que el caos ha sido dominado.

¿Qué más agregaría?

Más características que vale la pena considerar

Una computadora portátil con Windows 11 que muestra el contenido de un script de PowerShell y un acceso directo para ejecutarlo

Ensenada el script en un editor de texto y edítelo si piensa en poco que quiera cambiar. El carta de categorías cerca de la parte superior sería lo más obvio para modificar. Es posible que desee unir más tipos de archivos, dependiendo de con qué trabaja asiduamente. Por ejemplo, podría unir una categoría ‘Libros’ dirigida a EPUB, MOBI, CBZ, CBR, etc.

El script es en realidad casquivana de ampliar si desea unir funciones adicionales. Aquí hay poco que puede unir si desea que la secuencia de comandos genere un archivo de registro para tener un registro de cada actividad de movimiento de archivos que se realiza:

# Add this part near the top
$logPath = Join-Path $targetPath "organizer_log.txt"

# Add this part to the bottom of the ForEach-Object loop, after Move-Item
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path $logPath -Value "$timestamp | $($_.Name) -> $category"

Con PowerShell hay muchas más posibilidades. Puede hacer que busque archivos nuevos en el directorio y ordenarlos instantáneamente, o ordenar las cosas primero por categoría y luego por aniversario: Documentos2026Marzo. Muchas opciones.

Una alternativa elegante a un problema global

Lo que me gusta de las secuencias de comandos en PowerShell es que no requieren ninguna sobrecarga. No es necesario descargar aplicaciones de terceros ni instalar software adicional porque Windows ya tiene lo que necesita. Para un trabajo de automatización simple como este, PowerShell encaja perfectamente en esta función. Puede hacer que el Programador de tareas ejecute el script de forma rutinaria si desea automatizar aún más el proceso.

Related Posts

Firebreak, el shooter de servicio en vivo de Remedy, recibirá su última modernización importante

Remedy está cerrando su equipo de tiradores FBC: cortafuegos con una gran modernización que se vara hoy. Pero si perfectamente el mecanismo no recibirá ningún contenido nuevo en el futuro,…

La investigación sobre la pérdida de empleos por IA ignora cómo la IA está destruyendo por completo Internet

Un profesor ignorado cita un crónica de 404 Media, escrito por Jason Koebler: En los últimos meses, varios académicos y empresas de inteligencia fabricado han intentado predecir cómo la inteligencia…

Leave a Reply

Your email address will not be published. Required fields are marked *

You Missed

Firebreak, el shooter de servicio en vivo de Remedy, recibirá su última modernización importante

Firebreak, el shooter de servicio en vivo de Remedy, recibirá su última modernización importante

Laura Pausini regresa a raíces latinoamericanas con el disco ‘Yo canto 2’

Laura Pausini regresa a raíces latinoamericanas con el disco ‘Yo canto 2’

El dólar vuelve a cotizase por debajo de los 60 pesos

El dólar vuelve a cotizase por debajo de los 60 pesos

Presidenta balear, Marga Prohens, se reúne con el presidente dominicano, Luis Abinader

Presidenta balear, Marga Prohens, se reúne con el presidente dominicano, Luis Abinader

Subastarán un tramo de la escalera flamante que conducía al tercer suelo de la Torre Eiffel

Subastarán un tramo de la escalera flamante que conducía al tercer suelo de la Torre Eiffel

La investigación sobre la pérdida de empleos por IA ignora cómo la IA está destruyendo por completo Internet

La investigación sobre la pérdida de empleos por IA ignora cómo la IA está destruyendo por completo Internet