saber ruta para obtener nombre net extension completa como comando archivo .net powershell powershell-v2.0

.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