es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ayuda necesaria para la programación de Powershell

Necesito crear un programa en Powershell que lea todos los archivos .TXT presentes en una carpeta, y procese los archivos .TXT uno por uno para crear archivos .WAV a partir de estos. Para convertir un archivo .TXT a un archivo .WAV utilizamos el comando del servicio de TTS de Azure en la nube “SPX”:

spx sinthesize --files C_F_46044_201806281417.txt;.ssml --audio output 46044.wav

Mi archivo .TXT tiene una convención de nombres como esta C_F_46044_201806281417.txt, por lo que necesito extraer C, F y 46044 de ese nombre de archivo, y en base a esas letras moveré el archivo .WAV a las carpetas correspondientes C -> F.
Si el archivo es como M_E_12345_201806281417.txt, ese archivo .WAV deberá ir a la carpeta M -> E.
Además, el archivo .WAV generado debe ser renombrado como 46044.WAV o 12345.WAV según la tercera extracción.

Después de que los archivos .TXT sean procesados con éxito y convertidos a archivos .WAV, moveremos el archivo de la ubicación de entrada a la ubicación del archivo de archivo.

$Parts[2] –> Necesito obtener 46044 del nombre del archivo C_F_46044_201806281417.txt

A continuación se muestra la lógica de programación que he creado hasta ahora:

Set-ExecutionPolicy RemoteSigned
$delim = "_"
Get-ChildItem "C:\Users\rinki\Documents\azure\" -Filter *.txt |
Foreach-Object {
    $parts = $_ -split $delim

    # convertir archivo de texto a archivo wav en la carpeta C:\messages\audio\$parts[2].wav
    spx synthesize --file $_ --audio output C:\messages\audio\$parts[2].wav

    if ($parts[0] -match "M") {
        Copy-Item -Path $_ -Destination C:\archive\messages -PassThru
    }

    if ($parts[0] -match "C") {
        Copy-Item -Path $_ -Destination C:\archive\competitors -PassThru
    }

    # hacer una copia de seguridad del archivo en otra ubicación de archivo
    # Copy-Item -Path $_ -Destination C:\archive\backup -PassThru
}
Set-ExecutionPolicy Restricted
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Programa de Powershell para convertir archivos .TXT a archivos .WAV

    Para crear un programa de Powershell que lea todos los archivos .TXT presentes en una carpeta y procese cada archivo .TXT para crear un archivo .WAV a partir de él, utiliza la siguiente lógica de programación:

    # Establecer la política de ejecución
    Set-ExecutionPolicy RemoteSigned
    
    # Establecer el delimitador para el nombre de archivo
    $delim = "_"
    
    # Recorrer cada archivo TXT en la carpeta especificada
    Get-ChildItem "C:\Users\YourUserName\Documents\TXTFiles\" -Filter *.txt | ForEach-Object {
    
        # Dividir el nombre de archivo en partes basadas en el delimitador
        $parts = $_.Name -split $delim
    
        # Convertir el archivo TXT a un archivo WAV utilizando el servicio de TTS en la nube de Azure
        spx synthesize --file $_.FullName --audio output "C:\Users\YourUserName\Documents\WAVFiles\$($parts[2]).wav"
    
        # Si la primera letra es "M", mover el archivo a la carpeta "M"
        if($parts[0] -eq "M") {
            Move-Item -Path $_.FullName -Destination "C:\Users\YourUserName\Documents\Archive\Messages" -Force
        }
    
        # Si la primera letra es "C", mover el archivo a la carpeta "C" y luego moverlo a la carpeta correspondiente basada en la segunda letra
        if($parts[0] -eq "C") {
            Move-Item -Path $_.FullName -Destination "C:\Users\YourUserName\Documents\Archive\Competitors" -Force
    
            # Si la segunda letra es "F", mover el archivo a la carpeta "F"
            if($parts[1] -eq "F") {
                Move-Item -Path "C:\Users\YourUserName\Documents\WAVFiles\$($parts[2]).wav" -Destination "C:\Users\YourUserName\Documents\Archive\Competitors\C\F" -Force
            }
    
            # Si la segunda letra es "G", mover el archivo a la carpeta "G"
            if($parts[1] -eq "G") {
                Move-Item -Path "C:\Users\YourUserName\Documents\WAVFiles\$($parts[2]).wav" -Destination "C:\Users\YourUserName\Documents\Archive\Competitors\C\G" -Force
            }
    
            # Si la segunda letra es "H", mover el archivo a la carpeta "H"
            if($parts[1] -eq "H") {
                Move-Item -Path "C:\Users\YourUserName\Documents\WAVFiles\$($parts[2]).wav" -Destination "C:\Users\YourUserName\Documents\Archive\Competitors\C\H" -Force
            }
        }
    
        # Renombrar el archivo WAV para que coincida con el tercer valor de análisis
        Rename-Item -Path "C:\Users\YourUserName\Documents\WAVFiles\$($parts[2]).wav" -NewName "$($parts[2]).wav"
    
        # Mover el archivo TXT a la ubicación de archivo de archivo
        Move-Item -Path $_.FullName -Destination "C:\Users\YourUserName\Documents\Archive\TXTFiles" -Force
    }
    
    # Restablecer la política de ejecución a restringida
    Set-ExecutionPolicy Restricted
    

    En esta lógica, primero establecemos la política de ejecución en RemoteSigned para permitir que se ejecute el script de Powershell. Luego establecemos el delimitador para el nombre del archivo y recorremos cada archivo TXT en la carpeta especificada.

    Para cada archivo TXT, dividimos el nombre del archivo en partes basadas en el delimitador y convertimos el archivo TXT a un archivo WAV utilizando el comando del servicio de TTS en la nube de Azure. Luego movemos el archivo TXT a la ubicación de archivo de archivo correspondiente basada en la primera letra del nombre del archivo.

    Si la primera letra es “C”, primero movemos el archivo a la carpeta “C” y luego lo movemos a la subcarpeta correspondiente basada en la segunda letra. También renombramos el archivo WAV para que coincida con el tercer valor de análisis. Finalmente, movemos el archivo TXT a la ubicación de archivo de archivo y restablecemos la política de ejecución a restringida.

Comments are closed.