web-dev-qa-db-ja.com

パスからファイル名を抽出する

以下のパスからファイル名を抽出したい:

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

今、私はファイル名を取得するためにこのコードを書きました。これは、フォルダーレベルが変更されない限り正常に機能します。ただし、フォルダレベルが変更された場合は、このコードを書き換える必要があります。フォルダーレベルに関係なく、コードが常にファイル名を抽出できるように、より柔軟にする方法を探しています。

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

拡張機能を含めることに問題がなければ、これはあなたが望むことをするはずです。

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

。net を使用します。

[System.IO.Path]::GetFileName("c:\foo.txt")foo.txtを返します。 [System.IO.Path]::GetFileNameWithoutExtension("c:\foo.txt")fooを返します

35
angularsen

Get-ChildItemでBaseNameを使用すると、ファイルの名前が表示され、Nameを使用すると、拡張子付きのファイル名が表示されます。

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

$filepath.BaseName

Basic-English-Grammar-1

$filepath.Name

Basic-English-Grammar-1.pdf
9
Sudhir Tharayil

このようにして、望む結果を得ることができます。

$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」を使用して「fullname」を取得する場合、「name」を使用してファイルの名前を取得することもできます。

3
David

上記の回答を完了するには、.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
1
J. Does

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

1
Ian Kemp

$(分割パス "D:\ Server\User\CUST\MEA\Data\In\Files\CORRECTED\CUST_MEAFile.csv" -leaf)

1
Iain