【问题标题】:How do you call Windows Explorer with a file selected from Powershell?如何使用从 Powershell 中选择的文件调用 Windows 资源管理器?
【发布时间】:2015-08-14 16:30:28
【问题描述】:

我在编写我的第一个基本 PowerShell 实用程序时遇到了问题。我需要打开一个资源管理器窗口并选择一个文件,但无法正确获取命令的语法。

我在 SO,https://stackoverflow.com/a/12162855/957246 上找到了这个答案,并阅读了这个关于外部命令的优秀博客,http://edgylogic.com/blog/powershell-and-external-commands-done-right/ - 但仍然无法让它工作。

这是我的示例脚本(test.ps1):

$myFile = "C:\Projects\Scripts\any.txt"
# The backslash-backticks are to escape the speech marks, once for PowerShell and then again for DOS
& "C:\Projects\Scripts\EchoArgs.exe" /select",\`"$myFile\`""
& "explorer" /select",\`"$myFile\`""

..这是调用它的批处理文件,以防我调用 PowerShell 脚本的方式有问题:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\Projects\Scripts\test.ps1'"

我尝试了几种不同的组合,echoargs 的输出表明语法是正确的(假设资源管理器的参数字符串被视为单个字符串)但无论我尝试什么都只是在“我的文档”上打开一个资源管理器窗口并且参数被忽略/被丢弃在某处。

在 explorer.exe 开关的 MSDN 页面上有一点说逗号是一个空参数,也许这就是我需要通过不同格式设置命令来提供的东西?

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    在 powershell 中使用批处理命令有什么意义?你只会这样迷惑自己……和我一样。

    $myFile = "C:\Projects\Scripts\any.txt"
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.InitialDirectory = Split-Path $myFile -Parent 
    $OpenFileDialog.FileName = Split-path $myfile -leaf
    $OpenFileDialog.ShowDialog() | Out-Null
    

    编辑

    如果你需要继续探索路线,试试这个:

    Start-Process -FilePath C:\Windows\explorer.exe -ArgumentList "/select, ""$myFile"""

    【讨论】:

    • 对多个 cmets 感到抱歉。当我将它粘贴到我的测试脚本中时,或者如果我从 PowerShell IDE 运行它,它会显示“无法加载,因为脚本的执行在这个系统上被禁用”。其他脚本正常工作,因此错误消息的文本可能是红鲱鱼。也许还有其他我应该包含的内容或脚本需要使您的示例正常工作的其他一些常见元素?
    • 如果相关的话,我正在使用 PowerShell v2,也许有一些 v2 不喜欢的东西?我已经用 powershell-v2.0 标签更新了这个问题。另外 - 我正在编写的脚本(它调用其他几个带有参数的可执行文件没有问题)对文件做了一些事情。然后,我想用为用户选择的文件打开 Windows 资源管理器(这就是为什么该示例在变量中具有文件名并从示例批处理文件中调用)。您的示例看起来像是在打开文件选择对话框而不是资源管理器?
    • @trapper_hag 在任何机器上使用 powershell 脚本之前,您必须设置执行策略:Set-ExecutionPolicy RemoteSigned ...有关更多信息,请参阅Get-Help about_Execution_Policies
    • 非常感谢您的帮助 :) 您的示例现在可以在 Powershell IDE 中运行 - 但它打开的是文件选择对话框,而不是 Windows 资源管理器。我更改了标题,以便更清楚地表明我需要在 Windows 资源管理器中选择文件。
    • @trapper_hag 您需要分别为 IDE 和控制台设置执行策略。另外,我更新了我的帖子以更好地满足您的需求
    【解决方案2】:

    你也可以使用:

    $dir = "\\PATH\TO\YOUR\DIRECTORY"
    C:\Windows\explorer.exe "/select,$dir"
    

    【讨论】:

    • 对我不起作用...我需要在资源管理器调用中省略引号才能使其正常工作。
    猜你喜欢
    • 2020-08-20
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多