Necesito extraer el nombre del archivo y la extensión de, por ejemplo, my.file.xlsx. No sé el nombre del archivo o la extensión y puede haber más puntos en el nombre, por lo que necesito buscar la cadena desde la derecha y cuando encuentro el primer punto (o el último desde la izquierda), extraer la parte de la el lado derecho y la parte del lado izquierdo de ese punto.
Tal vez haya una mejor solución, pero no encontré nada aquí ni en ningún otro lugar. Gracias
.net
powershell
powershell-2.0
culter
fuente
fuente
Respuestas:
Si el archivo está saliendo del disco y como otros han dicho, use las propiedades
BaseName
yExtension
:Si se le da el nombre del archivo como parte de una cadena (digamos que proviene de un archivo de texto), usaría los métodos estáticos
GetFileNameWithoutExtension
yGetExtension
de la clase System.IO.Path :fuente
[System.IO.Path] | Get-Member -Static
[System.IO.Path]::GetExtension
devuelve la extensión que incluye el punto (".") .fuente
Si es de un archivo de texto y se supone que el archivo de nombre está rodeado por espacios en blanco, esta es una forma:
Si es un archivo, puede usar algo como esto según sus necesidades:
fuente
fuente
Compruebe las propiedades BaseName y Extension del objeto FileInfo.
fuente
Usar ruta dividida
fuente
Split(".")[-1]
para que funcione con archivos con puntos en el nombresimplemente hazlo:
fuente
$file.Basename
Esta es una adaptación, si alguien tiene curiosidad. Necesitaba probar si RoboCopy copió correctamente un archivo en varios servidores para comprobar su integridad:
Agradable y simple, y muestra el directorio y el archivo dentro de él. Si desea especificar un nombre de archivo o una extensión, simplemente reemplace los * con lo que desee.
fuente
A partir de PowerShell 6.0,
Split-Path
tiene un-Extenstion
parámetro. Esto significa que puede hacer:o
Para
$path = "test.txt"
ambas versiones volverá.txt
, incluido el punto final.fuente