Cómo extraer automáticamente archivos ZIP en Windows 10

Windows 10 no extrae cada archivo ZIP al recibirlo por defecto. Su PowerShell integrado sí puede hacerlo: el monitor que se muestra a continuación supervisa una carpeta de descargas, espera a que un nuevo archivo .zip deje de cambiar y, a continuación, lo extrae en una carpeta con el mismo nombre. El archivo ZIP original permanece en su lugar y la ubicación de destino existente nunca se sobrescribe.

Utilice la extracción automática únicamente para archivos procedentes de fuentes de confianza. Compruebe los archivos antes de abrirlos o ejecutarlos.

El Explorador de archivos está abierto en la carpeta Descargas y se ve un archivo ZIP en la lista de archivos.
La carpeta Descargas contiene el archivo ZIP que el observador monitorizará.

1. Confirma tu carpeta de descargas

En el Explorador de archivos, escriba la ruta %USERPROFILE%\Downloadsen la barra de direcciones. Si su navegador guarda los archivos en otra ubicación, utilice la ruta de esa carpeta. Este programa monitoriza una carpeta y no analiza las subcarpetas.

Para los ejemplos que aparecen a continuación, guarda el script Watch-Zips.ps1en la carpeta Descargas. Si utilizas otra carpeta, cambia la primera línea del script por su ruta completa.

El Bloc de notas muestra la ruta del observador de PowerShell, el filtro de nombre de archivo ZIP y la configuración de FileSystemWatcher.
El script apunta a la carpeta Descargas y filtra los archivos .zip.

2. Crea el script del observador.

Abre el Bloc de notas, pega el código y guárdalo como Watch-Zips.ps1. En Guardar como, elige Todos los archivos para que el Bloc de notas no añada .txt. El script detecta la creación y el cambio de nombre de archivos ZIP, comprueba que el archivo deje de crecer y esté desbloqueado, y luego lo extrae a una carpeta temporal antes de moverlo a su ubicación definitiva. La documentación de Microsoft FileSystemWatcher describe estos eventos y los límites de su búfer de eventos.

$folder = Join-Path $env:USERPROFILE 'Downloads'
if (-not (Test-Path -LiteralPath $folder)) { throw "Folder not found: $folder" }

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $folder
$watcher.Filter = '*.zip'
$watcher.IncludeSubdirectories = $false
$watcher.NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
$watcher.EnableRaisingEvents = $true
Register-ObjectEvent $watcher Created -SourceIdentifier ZipCreated | Out-Null
Register-ObjectEvent $watcher Renamed -SourceIdentifier ZipRenamed | Out-Null
Write-Host "Watching $folder for ZIP files. Close this window to stop."

while ($true) {
    $signal = Wait-Event -Timeout 2
    if ($null -eq $signal) { continue }
    $zipPath = $signal.SourceEventArgs.FullPath
    Remove-Event -EventIdentifier $signal.EventIdentifier

    $lastLength = -1L
    $stable = 0
    for ($i = 0; $i -lt 600 -and $stable -lt 4; $i++) {
        try {
            $length = (Get-Item -LiteralPath $zipPath -ErrorAction Stop).Length
            $stream = [IO.File]::Open($zipPath, [IO.FileMode]::Open, [IO.FileAccess]::Read, [IO.FileShare]::None)
            $stream.Dispose()
            if ($length -gt 0 -and $length -eq $lastLength) { $stable++ } else { $stable = 0 }
            $lastLength = $length
        } catch { $stable = 0 }
        Start-Sleep -Seconds 1
    }
    if ($stable -lt 4) { Write-Warning "File stayed busy; skipped: $zipPath"; continue }

    $name = [IO.Path]::GetFileNameWithoutExtension($zipPath)
    $destination = Join-Path $folder $name
    if (Test-Path -LiteralPath $destination) {
        Write-Warning "Destination exists; skipped: $destination"
        continue
    }
    $temporary = "$destination.extracting-$([guid]::NewGuid().ToString('N'))"
    try {
        Expand-Archive -LiteralPath $zipPath -DestinationPath $temporary -ErrorAction Stop
        Move-Item -LiteralPath $temporary -Destination $destination -ErrorAction Stop
        Write-Host "Extracted to $destination"
    } catch {
        if (Test-Path -LiteralPath $temporary) { Remove-Item -LiteralPath $temporary -Recurse -Force -ErrorAction SilentlyContinue }
        Write-Warning "Could not extract $zipPath : $($_.Exception.Message)"
    }
}
Una ventana del Bloc de notas que muestra comprobaciones del tamaño de archivos ZIP de PowerShell y una prueba exclusiva de apertura de archivos.
El programa de control verifica que el archivo ZIP sea estable y esté desbloqueado antes de la extracción.

3. Pruébalo antes de ocultar la ventana.

Abre PowerShell y ejecuta:

powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File "$env:USERPROFILE\Downloads\Watch-Zips.ps1"

Espere a que aparezca el mensaje "Observando", deje la ventana abierta y descargue o copie un archivo ZIP pequeño y confiable en la carpeta Descargas. Debería aparecer una carpeta con el mismo nombre junto a él. El script no analiza los archivos ZIP que ya están presentes al iniciarse; pruebe con un archivo nuevo o recién copiado.

Si la carpeta de destino ya existe, el script omite la extracción para proteger su contenido. Cambie el nombre de la carpeta si desea extraer el archivo nuevamente. Cierre la ventana de PowerShell para detener esta prueba.

Consola de PowerShell que muestra el proceso de monitorización a la espera de archivos ZIP en la carpeta Descargas.
Mantén el monitor abierto mientras pruebas un nuevo archivo.
El Explorador de archivos muestra el archivo SampleData.zip junto a la carpeta SampleData extraída.
El archivo ZIP permanece en la carpeta Descargas, junto a la carpeta donde se extrajo.

4. Iniciar el observador al iniciar sesión

Abra el Programador de tareas desde Inicio y seleccione Crear tarea . En General, asígnele el nombre Monitorear archivos ZIP descargados y seleccione Ejecutar solo cuando el usuario haya iniciado sesión . En Desencadenadores, seleccione Nuevo y establezca Iniciar la tarea en Al iniciar sesión en su cuenta.

En Acciones, elija Nuevo , seleccione Iniciar un programa e ingrese powershell.execomo programa. En Agregar argumentos, use esta línea, reemplazando Alexcon la carpeta de su perfil de Windows:

-NoProfile -WindowStyle Hidden -ExecutionPolicy RemoteSigned -File "C:\Users\Alex\Downloads\Watch-Zips.ps1"

En Configuración, seleccione No iniciar una nueva instancia si la tarea ya se está ejecutando y, a continuación, guarde los cambios. La documentación de referencia del Programador de tareas de Microsoft describe los desencadenadores de inicio de sesión. Esto se aplica al proceso de PowerShell iniciado; la directiva de la organización aún puede bloquear el script. No debilite una directiva administrada. Consulte la guía de directivas de ejecuciónRemoteSigned de Microsoft .

Programador de tareas: cuadro de diálogo Crear tarea en la pestaña Acciones, con PowerShell configurado para ejecutar Watch-Zips.ps1.
Agregue el script de PowerShell como acción de la tarea.
El cuadro de diálogo Crear tarea del Programador de tareas muestra un desencadenador habilitado al iniciar sesión para el usuario actual.
Inicie el monitor cuando la cuenta de Windows inicie sesión.

5. Verificar, detener o solucionar problemas

En la Biblioteca del Programador de tareas, seleccione la tarea y elija Ejecutar . Confirme que su estado sea En ejecución y, a continuación, pruebe con otro archivo ZIP de confianza. Para detenerla, haga clic con el botón derecho en la tarea y elija Finalizar ; elija Deshabilitar para evitar que se inicie al iniciar sesión de nuevo.

Si la extracción falla, ejecute el script en modo visible para leer las advertencias, confirme la carpeta monitorizada y espere a que finalice la descarga. Para un archivo que ya se encuentre en Descargas, utilice la opción Extraer todo del Explorador de archivos o la de PowerShell . La documentación de Expand-ArchiveExpand-Archive de Microsoft indica un límite de tamaño de archivo de 2 GB en la API .NET que utiliza.

La biblioteca del programador de tareas muestra la tarea "Observar archivos ZIP descargados" con el estado "En ejecución".
Confirme que el proceso de supervisión programado se esté ejecutando.

Dejar un comentario

Convierte fotos en pinturas, bocetos y dibujos animados con FotoSketcher.

Convierte fotos en pinturas, bocetos y dibujos animados con FotoSketcher.

Convierte una foto en una pintura, un boceto a lápiz o una caricatura con FotoSketcher Studio. Aprende a elegir un efecto, ajustar la vista previa y guardar tu obra.

Analice e identifique archivos de audio en detalle con Audio Identifier.

Analice e identifique archivos de audio en detalle con Audio Identifier.

Descubre qué revela Audio Identifier sobre la tasa de bits, los codificadores y las etiquetas, cómo funciona su flujo de trabajo anterior y qué herramientas actuales inspeccionan archivos o identifican canciones.

My Photo Index: Un organizador de fotos de código abierto para Windows

My Photo Index: Un organizador de fotos de código abierto para Windows

My Photo Index es un catalogador de fotos antiguo de Windows para etiquetar, clasificar y explorar imágenes locales. Consulta sus funciones documentadas, limitaciones de compatibilidad y una alternativa actualizada.

Cambiar atributos, fechas y horas de archivos y carpetas con Attribute Changer

Cambiar atributos, fechas y horas de archivos y carpetas con Attribute Changer

Aprenda a usar Attribute Changer para editar los atributos y las marcas de tiempo de los archivos de Windows, actualizar las fechas EXIF ​​de las fotos JPEG y previsualizar los cambios por lotes de forma segura.

NeoDownloader: Configura parámetros y descarga imágenes por lotes desde sitios web.

NeoDownloader: Configura parámetros y descarga imágenes por lotes desde sitios web.

Aprende a crear un proyecto de NeoDownloader, elegir el alcance del rastreo, configurar los filtros de imagen y el destino, y revisar las descargas por lotes.

pViewer: Un visor de imágenes minimalista y lector de manga y cómics.

pViewer: Un visor de imágenes minimalista y lector de manga y cómics.

Aprende qué hace pViewer, cómo funcionan sus modos de foto y cómic, qué edición de Windows descargar y en qué se diferencian las versiones anterior y la reescrita.

Cómo configurar un fondo de pantalla diferente en cada monitor en Windows 10

Cómo configurar un fondo de pantalla diferente en cada monitor en Windows 10

Configura un fondo de pantalla diferente para cada monitor de Windows 10, identifica las pantallas, ajusta el tamaño de la imagen y soluciona problemas con la falta de opciones de monitor.

Cómo cambiar al siguiente fondo de escritorio con una combinación de teclas en Windows 7 y 8.

Cómo cambiar al siguiente fondo de escritorio con una combinación de teclas en Windows 7 y 8.

Configura una presentación de diapositivas en Windows 7 u 8, crea un pequeño acceso directo en VBScript y asigna una combinación de teclas para pasar al siguiente fondo de pantalla.

XnConvert: Aplica efectos y convierte formatos de imagen por lotes.

XnConvert: Aplica efectos y convierte formatos de imagen por lotes.

Usa XnConvert para aplicar efectos, redimensionar fotos y convertir formatos de imagen por lotes. Elige la configuración de salida, previsualiza las ediciones y protege tus originales.

Controla tus horas de trabajo y el uso del ordenador con ManicTime.

Controla tus horas de trabajo y el uso del ordenador con ManicTime.

Aprende cómo ManicTime realiza un seguimiento del uso de las aplicaciones, el tiempo de actividad e inactividad y los documentos, y luego convierte tu historial de actividad en etiquetas de proyecto y hojas de horas.