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.

Reemplace la salida del comando ‘tree’ por espacios y tabulaciones.

Entonces, hay un problema que estoy tratando de resolver y no sé si esta es la manera de hacerlo.

Básicamente, tengo una estructura de carpetas que se ve así:

---carpeta
    ---subcarpeta1
        +---subsub1
        |   +---subsubsub1
        ---subsub2
            ---subsubsub2

Y quiero que se vea en Excel así:
link to excel screenshot

Sé que el comando tree en Powershell o en la línea de comandos proporciona el texto de salida anterior, que es cómo lo obtuve. Ahora estoy tratando de darle formato a la salida del comando para que contenga espacios y tabulaciones en lugar de los +, \, | y – que tiene. Luego puedo importarlo a Excel para obtener la salida que busco en esa captura de pantalla.

En mi script de PS, actualmente puedo reemplazar los – con espacios, pero los símbolos +, \ y | resultan ser caracteres especiales que no se reemplazan tan fácilmente.

Es posible que lo que estoy tratando de lograr se pueda hacer de una manera mucho más fácil, y si es así, estoy abierto a ideas, pero esta es la forma en la que he estado intentando abordarlo.

Esto es lo que tengo hasta ahora para el código de Powershell:

$filename = "test.txt"
tree /a > $filename
get-content $filename | %{$_ -replace "-"," "}
get-content $filename | %{$_ -replace [RegEx]::Escape('< SharedPassKey=123456789abcdefghi/JKLM+nopqrst= >'),'< SharedPassKey=123456789abcdefghi/JKLM.nopqrst= >'}

Algunas cosas con las que me he encontrado hasta ahora:

  • https://stackoverflow.com/questions/45741845/unable-to-edit-replace-string-value-with-plus-symbol-in-text-file-via-powers
  • https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Convertir la estructura de carpetas en formato Excel

    Como experto en IT especializado en Windows, PowerShell y manipulación de cadenas, el siguiente script de PowerShell es un buen enfoque para resolver el problema de convertir una estructura de carpetas en un formato legible por Excel.

    El objetivo de este script es reemplazar los caracteres especiales – (guión), + (signo más), \ (barra invertida), | (barra vertical) con espacios y tabulaciones para formatear la salida de texto del comando tree. Después de eso, podemos importar el archivo formateado en Excel para obtener la salida deseada.

    El código de PowerShell proporcionado en la pregunta original es un buen punto de partida, donde almacenamos la salida sin formato del comando tree en un archivo llamado test.txt, luego iteramos sobre las líneas del archivo y aplicamos dos expresiones regulares para reemplazar los guiones y los caracteres especiales “<sharedpasskey=123456789abcdefghi jklm+nopqrst=”/”>” con espacios y puntos.

    Sin embargo, el script necesita algunas mejoras para manejar correctamente los caracteres especiales. Aquí hay algunas sugerencias:

    • En lugar de usar el operador -replace para manejar los caracteres especiales, podemos usar el método .Replace() de una variable de cadena para reemplazar cada carácter especial con su carácter de espacio o tabulación correspondiente. Este método es más rápido y confiable que las expresiones regulares en este caso.
    • Necesitamos escapar correctamente los caracteres especiales antes de usarlos en el patrón de expresión regular. Podemos usar el método [Regex]::Escape() para hacer esto automáticamente.
    • Necesitamos tener en cuenta que los caracteres especiales pueden aparecer al comienzo de la línea (| o +) o al final de la línea (), o en medio de la línea (-).

    Aquí hay una versión mejorada del código de PowerShell:

    $filename = "test.txt"
    tree /a > $filename
    
    # reemplazar guiones con espacios
    (Get-Content $filename) -replace '-', ' ' | Set-Content $filename
    
    # reemplazar caracteres especiales con espacios o tabulaciones
    (Get-Content $filename) | ForEach-Object {
        $line = $_.Trim()
        if ($line.StartsWith('+') -or $line.StartsWith('|')) {
            $line = $line.Replace('+', (' ' * 4)).Replace('|', "`t")
        }
        $line = $line.Replace('\', '`t').Replace('<sharedpasskey=123456789abcdefghi jklm+nopqrst="/">', (' ' * 10))
        $line
    } | Set-Content $filename
    

    En este script, primero reemplazamos los guiones con espacios usando el operador -replace como en el script original.

    Después de eso, iteramos sobre las líneas del archivo usando el cmdlet ForEach-Object y realizamos las siguientes operaciones:

    • Recortamos la línea para quitar cualquier espacio inicial o final.
    • Comprobamos si la línea comienza con el símbolo + o | usando el método StartsWith() de una cadena. Si es así, reemplazamos cada signo + con cuatro espacios y cada símbolo | con un carácter de tabulación usando el método .Replace(). Esto alineará correctamente los subdirectorios.
    • Reemplazamos cada \ (barra invertida) con un carácter de tabulación usando el método .Replace(). Esto alineará correctamente los nombres de las carpetas.
    • Finalmente, reemplazamos los caracteres especiales ‘<sharedpasskey=123456789abcdefghi jklm+nopqrst=”/”>’ con diez espacios usando el método .Replace(). Esto se asegurará de que los caracteres especiales se reemplacen correctamente.

    Nota: El número de espacios utilizados para reemplazar los caracteres especiales o el signo + puede depender del ancho de las columnas en Excel o del tamaño de la fuente utilizada. Puede ajustar el número de espacios según sea necesario.

    Después de ejecutar este script, deberíamos tener un archivo llamado test.txt con la salida formateada del comando tree que se puede importar en Excel.

    Espero que esto ayude. Por favor, avísame si tienes alguna pregunta sobre esta solución.</sharedpasskey=123456789abcdefghi></sharedpasskey=123456789abcdefghi></sharedpasskey=123456789abcdefghi>

Comments are closed.