.net - ruta - obtener nombre de archivo shell
powershell-extrae el nombre y la extensión del archivo (8)
Compruebe las propiedades BaseName y Extension del objeto FileInfo.
Necesito extraer el nombre de archivo y la extensión de, por ejemplo, my.file.xlsx. No sé el nombre del archivo o la extensión y puede que haya más puntos en el nombre, así que necesito buscar la cadena desde la derecha y cuando encuentro el primer punto (o el último desde la izquierda), extraigo la parte en el el lado derecho y la parte del lado izquierdo de ese punto.
Quizás haya una mejor solución, pero no encontré nada aquí ni en ningún otro lado. Gracias
Esta es una adaptación, si alguien tiene curiosidad. Necesitaba probar si RoboCopy copió con éxito un archivo en varios servidores por su integridad:
$Comp = get-content c:/myfile.txt
ForEach ($PC in $Comp) {
dir "//$PC/Folder/Share/*.*" | Select-Object $_.BaseName
}
Agradable y simple, y muestra el directorio y el archivo dentro de él. Si desea especificar un nombre de archivo o extensión, simplemente reemplace los * con lo que quiera.
Directory: //SERVER/Folder/Share
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/27/2015 5:33 PM 1458935 Test.pptx
Si es de un archivo de texto y el archivo de nombre presumido están rodeados de espacios en blanco, esta es una forma:
$a = get-content c:/myfile.txt
$b = $a | select-string -pattern "/s.+/..{3,4}/s" | select -ExpandProperty matches | select -ExpandProperty value
$b | % {"File name:{0} - Extension:{1}" -f $_.substring(0, $_.lastindexof(''.'')) , $_.substring($_.lastindexof(''.''), ($_.length - $_.lastindexof(''.''))) }
Si es un archivo, puede usar algo como esto en función de sus necesidades:
$a = dir ./my.file.xlsx # or $a = get-item c:/my.file.xlsx
$a
Directory: Microsoft.PowerShell.Core/FileSystem::C:/ps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 25/01/10 11.51 624 my.file.xlsx
$a.BaseName
my.file
$a.Extension
.xlsx
Usar Split-Path
$filePath = "C:/PS/Test.Documents/myTestFile.txt";
$fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];
solo hazlo:
$file=Get-Item "C:/temp/file.htm"
$file.Name
$file.Extension
Si el archivo está saliendo del disco y como otros han indicado, use las propiedades BaseName
y Extension
:
PS C:/> dir *.xlsx | select BaseName,Extension
BaseName Extension
-------- ---------
.com Test Config .xlsx
Si le dan el nombre del archivo como parte de la cadena (digamos que proviene de un archivo de texto), usaría los métodos estáticos GetFileNameWithoutExtension
y GetExtension
de la clase System.IO.Path :
PS C:/> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
Test Config
PS H:/> [System.IO.Path]::GetExtension("Test Config.xlsx")
.xlsx
PS C:/Users/joshua> $file = New-Object System.IO.FileInfo(''file.type'')
PS C:/Users/joshua> $file.BaseName, $file.Extension
file
.type
PS C:/Windows/System32/WindowsPowerShell/v1.0>split-path "H:/Documents/devops/tp-mkt-SPD-38.4.10.msi" -leaf
tp-mkt-SPD-38.4.10.msi
PS C:/Windows/System32/WindowsPowerShell/v1.0> $psversiontable
Name Value
---- -----
CLRVersion 2.0.50727.5477
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1