Витягніть ім'я файлу із шляху


83

Я хочу витягти ім'я файлу з нижнього шляху:

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

Тепер я написав цей код, щоб отримати ім'я файлу. Це працює нормально, якщо рівень папки не змінюється. Але якщо рівень папки був змінений, цей код потрібно переписати. Я шукаю спосіб зробити його більш гнучким, наприклад, код завжди може витягти ім'я файлу незалежно від рівня папки.

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

Відповіді:


164

Якщо ви в порядку з розширенням, це має робити те, що ви хочете.

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

6
Це чудова відповідь. Це вирішує проблему найбільш «вбудованим» способом. Однак для своїх потреб мені знадобилося як ім'я файлу з розширенням, так і базове ім'я файлу, тому я використав відповідь @ angularsen. Існує ще один параметр, -leafbase, але він підтримується лише в PowerShell Core 6+.
Джеймі

62

Використовуйте :

[System.IO.Path]::GetFileName("c:\foo.txt")повертається foo.txt. [System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt")повертаєтьсяfoo


16

Використання BaseName у Get-ChildItem відображає ім'я файлу, а використання Name відображає ім'я файлу з розширенням.

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

$filepath.BaseName

Basic-English-Grammar-1

$filepath.Name

Basic-English-Grammar-1.pdf

4

Ви можете отримати бажаний результат таким чином.

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

Якщо ви використовуєте "Get-ChildItem", щоб отримати "повне ім'я", ви також можете використовувати "name", щоб просто отримати ім'я файлу.


6
Просто використовуйте індекс, -1якщо ви використовуєте підхід до масиву:$file.Split("\")[-1]
Ансгар Вічерс

Що ми можемо зробити, якщо ми хочемо видалити розширення?
Souradeep Banerjee-AIS

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

3

Тільки для заповнення відповіді вище, що використовують .Net.

У цьому коді шлях зберігається в %1аргументі (який записаний в реєстрі під цитатою, яка є екранованою:) \"%1\". Щоб отримати його, нам потрібен $arg(вбудований аргумент). Не забувайте про цитату навколо $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

Ви можете спробувати це:

[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

Знайдіть файл за допомогою підстановки та отримайте ім'я файлу:

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

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

Працює з обома відносними абсолютними шляхами

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.