Extraiga el nombre de archivo de una ruta


83

Quiero extraer el nombre de archivo de la ruta de abajo:

D: \ Server \ User \ CUST \ MEA \ Data \ In \ Files \ CORRECTED \ CUST_MEAFile.csv

Ahora escribí este código para obtener el nombre del archivo. Esto funciona bien siempre que el nivel de la carpeta no haya cambiado. Pero en caso de que se haya cambiado el nivel de la carpeta, este código debe reescribirse. Estoy buscando una manera de hacerlo más flexible, ya que el código siempre puede extraer el nombre del archivo independientemente del nivel de la carpeta.

($outputFile).split('\')[9].substring(0)

Respuestas:


164

Si está de acuerdo con incluir la extensión, esto debería hacer lo que quiera.

$outputPath = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
$outputFile = Split-Path $outputPath -leaf

6
Esta es una respuesta genial. Resuelve el problema de la forma más "incorporada". Sin embargo, para mis necesidades, necesitaba tanto el nombre de archivo con extensión como el nombre de archivo base, así que usé la respuesta de @ angularsen. Hay otro parámetro, -leafbase, pero solo es compatible con PowerShell Core 6+.
Jamie

62

Utilizar :

[System.IO.Path]::GetFileName("c:\foo.txt")devuelve foo.txt. [System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt")devolucionesfoo


16

El uso de BaseName en Get-ChildItem muestra el nombre del archivo y el uso de Name muestra el nombre del archivo con la extensión.

$filepath = Get-ChildItem "E:\Test\Basic-English-Grammar-1.pdf"

$filepath.BaseName

Basic-English-Grammar-1

$filepath.Name

Basic-English-Grammar-1.pdf

4

Podría obtener el resultado que desea de esta manera.

$file = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
$a = $file.Split("\")
$index = $a.count - 1
$a.GetValue($index)

Si usa "Get-ChildItem" para obtener el "nombre completo", también puede usar "nombre" para obtener simplemente el nombre del archivo.


6
Simplemente use el índice -1si está adoptando el enfoque de matriz:$file.Split("\")[-1]
Ansgar Wiechers

Si queremos eliminar la extensión, ¿qué podemos hacer?
Souradeep Banerjee-AIS

4
Get-ChildItem "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
|Select-Object -ExpandProperty Name

3

Solo para completar la respuesta anterior, use .Net.

En este código, la ruta se almacena en el %1argumento (que está escrito en el registro bajo comillas que se escapan :) \"%1\". Para recuperarlo, necesitamos el $arg(arg incorporado). No olvide la cita $FilePath.

# Get the File path:  
$FilePath = $args
Write-Host "FilePath: " $FilePath

# Get the complete file name:
$file_name_complete = [System.IO.Path]::GetFileName("$FilePath")
Write-Host "fileNameFull :" $file_name_complete

# Get File Name Without Extension:
$fileNameOnly = [System.IO.Path]::GetFileNameWithoutExtension("$FilePath")
Write-Host "fileNameOnly :" $fileNameOnly

# Get the Extension:
$fileExtensionOnly = [System.IO.Path]::GetExtension("$FilePath")
Write-Host "fileExtensionOnly :" $fileExtensionOnly

3
$(Split-Path "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv" -leaf)

3

Puedes probar esto:

[System.IO.FileInfo]$path = "D:\Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv"
# Returns name and extension
$path.Name
# Returns just name
$path.BaseName

2

Busque un archivo usando comodines y obteniendo el nombre del archivo:

Resolve-Path "Package.1.0.191.*.zip" | Split-Path -leaf

1
$file = Get-Item -Path "c:/foo/foobar.txt"
$file.Name

Funciona con rutas relativas y absolutas

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.