Powershell - 字符串操作 - 从完整文件路径获取目录
Powershell - String Manipulation - getting dir from full file-path
请记住,我是新手,请保持温柔。
我有文档 "C:\folder1\folder2.03.2017 - FileName.csv" 的完整文件路径,我想将其操作到 return 文件存储的目录 ( C:\folder1\folder2), 减去文件名 (01.03.2017 - FileName.csv).
我正在尝试将此模块化,以便无论文件所在的子文件夹数量如何,它都能正常工作;我们也不会提前知道文件名,所以这再次需要模块化并删除直到并包括最后一个“\”
有关当前如何构建的背景信息,我从我在 Whosebug 上看到的一个问题中截取了一些代码:
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
运行 当前提示输入 "open dialog box",您将在 Windows 中看到。您 select 一个文件夹,当前输出为:
C:\folder1\folder2.03.2017 - FileName.csv
C:
folder1
folder2
01.03.2017 - FileName.csv
我尝试了几次不同的 -join
尝试,但 none 成功了。
我们将输入 C:\folder1\folder2\01.03.2017 - FileName.csv 作为变量 $originalData.
我们希望输出为 C:\folder1\folder2 作为变量 $originalDir.
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
请记住,我是新手,请保持温柔。
我有文档 "C:\folder1\folder2.03.2017 - FileName.csv" 的完整文件路径,我想将其操作到 return 文件存储的目录 ( C:\folder1\folder2), 减去文件名 (01.03.2017 - FileName.csv).
我正在尝试将此模块化,以便无论文件所在的子文件夹数量如何,它都能正常工作;我们也不会提前知道文件名,所以这再次需要模块化并删除直到并包括最后一个“\”
有关当前如何构建的背景信息,我从我在 Whosebug 上看到的一个问题中截取了一些代码:
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
运行 当前提示输入 "open dialog box",您将在 Windows 中看到。您 select 一个文件夹,当前输出为:
C:\folder1\folder2.03.2017 - FileName.csv
C:
folder1
folder2
01.03.2017 - FileName.csv
我尝试了几次不同的 -join
尝试,但 none 成功了。
我们将输入 C:\folder1\folder2\01.03.2017 - FileName.csv 作为变量 $originalData.
我们希望输出为 C:\folder1\folder2 作为变量 $originalDir.
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