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.

Power Shell: Necesita colocar el nombre específico del archivo en el contenido del archivo.

Tengo un archivo test001.txt donde necesito reemplazar una palabra con el nombre del archivo. Por ejemplo:

Nombre del archivo: test001.txt contiene “Enviar regalo a CLIENTE”

Necesito reemplazar CLIENTE con el nombre del archivo “test001”, pero de manera automática. Esto significa que tengo varios archivos en una carpeta, quiero copiarlos en otra carpeta y cuando los copie quiero que todos los archivos tengan esa palabra reemplazando el nombre de su archivo.

test001, test002, test003, etc., por lo tanto, en lugar de CLIENTE en cada archivo, habrá: test001, test002, test003…

He intentado:

Copy-Item "C:\Ubicación1\*" -Destination "C:\ubicación2"  ----- para copiar todos los archivos 

$nombreArchivo = "C:\Ubicación1*"   ---- para tomar los nombres de todos los archivos

$fechaActual = get-date -format "yyMMdd"

$pruebaAutomatizada = "C:\Ubicación2\test1.DDI"  --- nombre del nuevo archivo

$contenido = [System.IO.File]::ReadAllText($pruebaAutomatizada).Replace("CLIENTE",$nombreArchivo)
[System.IO.File]::WriteAllText($pruebaAutomatizada, $contenido)

pero en realidad está reemplazando con “C:\Ubicación1*”, no el nombre del archivo en esa ubicación.

¿Alguna idea? ¡Gracias! 🙂

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para reemplazar la palabra CUSTOMER con el nombre de archivo en varios archivos de una carpeta, puedes usar el siguiente script en PowerShell:

    $path = "C:\Location1"
    $destination = "C:\Location2"
    $files = Get-ChildItem $path -Filter *.txt
    
    foreach ($file in $files) {
        $content = Get-Content $file.FullName
        $newContent = $content -replace "CUSTOMER", $file.BaseName
        $newPath = Join-Path $destination $file.Name
        Set-Content $newPath $newContent
    }
    

    Este script primero establece las rutas de las carpetas fuente y destino. Luego obtiene una lista de todos los archivos de texto en la carpeta fuente utilizando el comando Get-ChildItem. El bucle foreach luego recorre cada archivo de la lista y lee su contenido utilizando Get-Content. Luego, el script reemplaza la palabra CUSTOMER por el nombre base del archivo (sin la extensión del archivo) en el contenido utilizando el operador -replace y almacena el nuevo contenido en una variable llamada $newContent. El script luego utiliza el comando Join-Path para crear la ruta del nuevo archivo en la carpeta de destino y escribe el nuevo contenido en el nuevo archivo utilizando Set-Content.

Comments are closed.