2017-03-01 45 views
1

請記住,我對此很陌生,要溫柔。Powershell - 字符串操作 - 從完整文件路徑獲取目錄

我有一個完整的文件路徑爲一個文件「C:\文件夾1 \文件夾2 \ 2017年3月1日 - FileName.csv」,我想操縱它返回該文件存儲在目錄(ç :\ folder1 \ folder2),減去文件名(01.03.2017 - FileName.csv)。

我試圖使這個模塊化,以便它將工作,無論文件所在的子文件夾的數量;我們也不會提前知道文件名,所以需要再次模塊化並刪除最後一個「\

有關如何構建它的背景信息,我刻了一下代碼來自StackOverflow上看到的上一個問題:

Function Get-FileName($initialDirectory) 
{ 
[System.Reflection.Assembly]::LoadWithPartialName(「System.windows.forms」) | 
Out-Null 

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
$OpenFileDialog.initialDirectory = $initialDirectory 
$OpenFileDialog.filter = 「All files (*.*)| *.*」 
$OpenFileDialog.ShowDialog() | Out-Null 
$OpenFileDialog.filename 
} #end function Get-FileName 

# *** Entry Point to Script *** 

$originalData = Get-FileName -initialDirectory 「c:\」 | Out-String 
Write-Host $originalData 
$originalDir = $originalData.Split('\') 
$originalDir 

運行此目前提示您將在Windows中看到「打開對話框」。您選擇一個文件夾,其輸出是目前:

C:\folder1\folder2\01.03.2017 - FileName.csv 

C: 
folder1 
folder2 
01.03.2017 - FileName.csv 

我已經嘗試了一些不同的嘗試-join,但沒有成功。

我們將有℃的輸入:\文件夾1 \文件夾2 \ 2017年3月1日 - FileName.csv作爲變量$ originalData

我們希望可以將輸出爲C:\文件夾1 \文件夾2作爲變量$ originalDir

+0

'(GET-Childitem ITEMNAME).DirectoryName' – 4c74356b41

+0

這將如何使用? '(Get-ChildItem $ originalData).DirectoryName'? –

+0

這給你文件夾的路徑,只是試試 – 4c74356b41

回答

0
Function Get-FileName($initialDirectory) 
{ 
[System.Reflection.Assembly]::LoadWithPartialName(「System.windows.forms」) | 
Out-Null 

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
$OpenFileDialog.initialDirectory = $initialDirectory 
$OpenFileDialog.filter = 「All files (*.*)| *.*」 
$OpenFileDialog.ShowDialog() | Out-Null 
$OpenFileDialog.filename 
} #end function Get-FileName 

$originalData = Get-FileName -initialDirectory 「c:\」 
Write-Host $originalData 
$originalDir = (Get-ChildItem $originalData).DirectoryName 

你可以使用它像這樣,所以要結果還是您的功能和使用get-childitem使用它。

編輯:發現有第三沒有| Out-String到最後一行

+0

刪除我的錯誤。 根據您的編輯更正了我的腳本;感謝您突出顯示您刪除了'| Out-String'! 非常感謝您的快速回復/解決方案! –