Tengo una serie de cadenas que son rutas completas a los archivos. Me gustaría guardar solo el nombre del archivo, sin la extensión del archivo y la ruta principal. Entonces de esto:
c:\temp\myfile.txt
a
myfile
En realidad, no estoy iterando a través de un directorio, en cuyo caso se basename
podría usar algo como la propiedad de powershell , sino que estoy tratando solo con cadenas.
file
powershell
directory
larryq
fuente
fuente
Respuestas:
Hay un método .NET útil para eso:
fuente
Es mucho más fácil de lo que pensaba abordar el problema de mostrar la ruta completa, el directorio, el nombre del archivo o la extensión del archivo.
otras formas:
fuente
$csr = Get-ChildItem -Path "$($domain.FullName)/*.csr"
entoncesWrite-Host "fileName: $($csr.Basename)"
Inspirado por una respuesta de @ walid2mi:
Tenga en cuenta: esto solo funciona si el archivo dado realmente existe .
fuente
o
o
fuente
puedes usar la propiedad basename
fuente
@Keith ,
aquí otra opción:
fuente
Dada cualquier cadena de ruta arbitraria, varios métodos estáticos en el objeto System.IO.Path dan los siguientes resultados.
A continuación se muestra el código que generó el resultado anterior.
Escribir y probar el script que generó lo anterior descubrió algunas peculiaridades sobre cómo PowerShell se diferencia de C #, C, C ++, el lenguaje de script de comandos de Windows NT y casi todo lo demás con el que tengo experiencia.
fuente
A partir de PowerShell 6, obtiene el nombre de archivo sin extensión así:
fuente
Este script busca en una carpeta y subcarpetas y cambia el nombre de los archivos eliminando su extensión.
fuente
Ampliando la respuesta de René Nyffenegger, para aquellos que no tienen acceso a la versión 6.x de PowerShell, usamos Split Path, que no prueba la existencia de archivos:
Esto devuelve " myfile.txt ". Si sabemos que el nombre del archivo no tiene puntos, podemos dividir la cadena y tomar la primera parte:
o
Esto devuelve " myfile ". Si el nombre del archivo puede incluir puntos, para estar seguros, podríamos usar lo siguiente:
Esto devuelve " myfile.txt.config ". Aquí prefiero usar Substring () en lugar de Replace () porque la extensión precedida por un punto también podría ser parte del nombre, como en mi ejemplo. Al usar Substring, devolvemos el nombre del archivo sin la extensión solicitada.
fuente
Aquí hay uno sin paréntesis
fuente
Esto se puede hacer dividiendo la cuerda un par de veces.
Aquí está el código sin comentarios:
fuente