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





