【发布时间】:2019-12-28 05:56:32
【问题描述】:
我有一个带有 GUI 的脚本,它会弹出 Windows 资源管理器并允许用户选择一个文件来导出数据。但是,我想在他们选择的目录中操作一些文件,但是当我尝试在文件名上使用 Split-Path 时,我得到了这个错误:
设置位置:找不到驱动器。名为“System.Windows.Forms.TextBox, Text”的驱动器不存在。
有没有办法删除返回文本的开头部分,只获取里面的路径文本?
//users selected path from GUI Note* this is the path but it is selected by the gui button through file explorer
$UsersPath = "C:\username\desktop\MyFolder\myFile.csv"
$newPath = Split-Path -Path "$UsersPath"
Set-Location "$newPath.Text"
//In this case, $newPath = System.Windows.Forms.TextBox, Text: C:\Users\username\Desktop\myFolder
我曾尝试使用.Text 和.ToString 无济于事。
下面是我的代码,它让我打开一个对话框让用户选择一个文件。
function open_CSV_File{
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.InitialDirectory = "C:\";
$OpenFileDialog.Filter = "csv files (*.csv)|*.csv"
"
if ($OpenFileDialog.ShowDialog() -eq "OK"){
$textbox_BrowseForCSV.Text = $OpenFileDialog.FileName
}
}
【问题讨论】:
-
您发布的代码不会引发该错误。请创建一个minimal reproducible example 显示“用户选择的路径”的来源并用它更新您的问题。
-
我假设
$newPath实际上是一个TextBox实例,这可以解释症状; Rich 的回答和链接的帖子显示了如何访问可扩展字符串 ("...") 中的对象属性,但请注意,在您的场景中根本不需要可扩展字符串;Set-Location $newPath.Text应该可以。 -
谢谢@mklement0。是的,你说
Set-Location $newPath.Text应该工作是正确的。我的问题是 $userPath 的初始拆分。感谢您的帮助。 -
@AnsgarWiechers 它抛出了错误,因为我试图将位置设置为它无法识别的
System.Windows.Forms.TextBox, Text: C:\Users\username\Desktop\myFolder。 -
再一次,您发布的示例代码不会引发该错误,因为
"$newPath.Text"会评估为"C:\username\desktop\MyFolder.Text"(因此可能会导致“找不到路径”错误)。如果您在发布之前实际测试运行代码,这对您来说是显而易见的。这就是我要求您创建minimal reproducible example 的确切原因。
标签: powershell cmdlets