【发布时间】:2021-01-21 19:38:43
【问题描述】:
我有一个函数可以返回带有完整路径的文件夹名称,例如 C:\Folder\Subfolder。
然后我使用拆分路径提取子文件夹的名称。
当它的文件夹或子文件夹(如 C:\Folder 或 C:\Folder\Subfolder)时,它的工作方式与预期一样,但在选择驱动器时则不然
这是我的代码。 “获取文件夹”功能只是一个文件对话框,用户可以在其中选择文件夹:
$FolderNavn = Get-Folder
$FolderNavnKort = Split-Path -Path $Foldernavn -Leaf
这就是我所期待的:
如果文件夹是 'C:\Folder\Subfolder' 它应该返回 "Subfolder" (works)
如果文件夹只是 'C:\Folder' 它应该返回 "Folder" (works)
如果选择 C:\(因此不是文件夹)应该返回“”,但我得到:
Out-File : 不支持给定路径的格式。
当我在测试时,$FolderNavn 返回“C:\”。
有什么建议吗?
编辑,Get-Folder 的内容:
function Get-Folder {
[CmdletBinding()]
param (
[Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0)]
[string]$Message = "Please select a directory.",
[System.Environment+SpecialFolder]$InitialDirectory = [System.Environment+SpecialFolder]::MyComputer,
[switch]$ShowNewFolderButton
)
Add-Type -AssemblyName System.Windows.Forms
$dialog = New-Object System.Windows.Forms.FolderBrowserDialog
$dialog.Description = 'Select a directory.'
$dialog.RootFolder = $InitialDirectory
$dialog.ShowNewFolderButton = if ($ShowNewFolderButton) { $true } else { $false }
$selected = $null
# force the dialog TopMost
# Since the owning window will not be used after the dialog has been
# closed we can just create a new form on the fly within the method call
$result = $dialog.ShowDialog((New-Object System.Windows.Forms.Form -Property @{TopMost = $true }))
if ($result -eq [Windows.Forms.DialogResult]::OK){
$selected = $dialog.SelectedPath
}
# clear the FolderBrowserDialog from memory
$dialog.Dispose()
# return the selected folder
$selected
}
【问题讨论】:
-
你能分享你的“Get-Folder”脚本的内容吗?在我的电脑上运行
$foldername = Split-Path -Path C:\ -Leaf将$foldername设置为“C:\” -
另外,“Out-File”部分在哪里发挥作用?
-
@GuyS 我已经添加了脚本。感谢您抽出宝贵时间!
-
Out-File 在这里发挥作用:'$KanalNavne |输出文件 -FilePath $KanalerStiNavn -Encoding utf8 -Append'
-
$KanalerStiNavn需要是一个文件名 - 当您调用Out-File时的值是什么?你能把那部分也发一下吗?
标签: powershell