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.

PowerShell – Eliminando una carpeta de una ruta de cadena

Básicamente tengo un camino:
"root/main/EVILFOLDER/first/second/third/etc"
Y quiero eliminar EVILFOLDER/ específicamente el tercer segmento del camino. La cosa es que EVILFOLDER podría ser cualquier cosa, por lo que no puedo codificarlo de antemano y la longitud del camino y el número de “/” pueden tener cualquier longitud variable.

Tengo esto, y funciona, pero no es elegante.


$path = "root/main/EVILFOLDER/first/second/third/etc"
$basePath = "{0}/{1}/" -f $path.Split('/')
$subFolder = "{3}/' -f $shortPath.Split('/')
$subFolderIndex = $shortPath.IndexOf($subFolder)
$newPath = $basePath + $shortPath.Substring($subFolderIndex)

En última instancia, esperaba poder escribirlo como algo así como “{0}/{1}/{3}…” para obtener el resto de la lista de camino. ¿Ideas?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para eliminar el tercer segmento de una ruta de longitud variable que contiene una carpeta específica es utilizar el método Replace junto con el método Split para aislar el segmento objetivo. Aquí tienes un ejemplo de fragmento de código en PowerShell:

    $path = "root/main/EVILFOLDER/first/second/third/etc"
    $segments = $path.Split("/")  # dividir la ruta en segmentos
    $evilIndex = $segments.IndexOf("EVILFOLDER")
    $newPath = (($segments[0..($evilIndex - 1)] + $segments[($evilIndex + 1)..($segments.length - 1)]) -join "/")
    

    Aquí está lo que hace el código paso a paso:

    1. Define la ruta de entrada como una variable de tipo cadena.
    2. Divide la cadena de la ruta en una matriz de segmentos utilizando el delimitador de barra diagonal (/).
    3. Encuentra el índice de la carpeta objetivo (EVILFOLDER) dentro de la matriz de segmentos.
    4. Construye una nueva matriz de segmentos que excluye la carpeta objetivo concatenando el subconjunto de segmentos antes del índice objetivo con el subconjunto de segmentos después del índice objetivo (omitendo el índice objetivo en sí).
    5. Combina la nueva matriz de segmentos de nuevo en una cadena utilizando el delimitador de barra diagonal. Esto da como resultado la ruta modificada final sin la carpeta objetivo.

    Este código debería funcionar independientemente de la longitud o el número de segmentos en la ruta de entrada, siempre y cuando contenga la carpeta objetivo que se desea eliminar.

    Ten en cuenta que existen muchas otras formas de lograr el mismo resultado utilizando diferentes métodos de manipulación de cadenas y matrices, dependiendo de tus preferencias y requisitos. El código anterior es solo un ejemplo que utiliza lógica simple y directa.

Comments are closed.