3

我想知道是否可以从 cmd 打开“打开”对话框,以便我可以使用它来选择要打开的正确文件。(我已经知道如何直接从 cmd 打开文件,但这不是我感兴趣的)

目前我正在做一个使用程序(例如program.exe)的项目。这个程序需要一个模型文件(例如modelfile.mod)。我通过编写以下命令在 CMD 中执行程序:program.exe modelfile.mod,它可以工作。我有许多不同名称的模型文件,但程序文件始终具有相同的名称。不是每次我需要执行程序时都写入 CMD,我想创建一个批处理,我可以在其中选择我喜欢执行的 modfile,然后它以选择的 modfile 作为输入来执行程序。

因此,我需要知道如何从 cmd 打开“打开”对话框,以及如何获取所选文件的名称以用于执行程序。

4

1 回答 1

2

如果您已安装 PowerShell,则可以执行以下操作:

@echo off
setlocal
set ps_cmd=powershell "Add-Type -AssemblyName System.windows.forms|Out-Null;$f=New-Object System.Windows.Forms.OpenFileDialog;$f.Filter='Model Files (*.mod)|*.mod|All files (*.*)|*.*';$f.showHelp=$true;$f.ShowDialog()|Out-Null;$f.FileName"

for /f "delims=" %%I in ('%ps_cmd%') do set "filename=%%I"

if defined filename (
    echo You chose %filename%
) else (
    echo You didn't choose squat!
)

goto :EOF

或者,如果您想分解 powershell cmdlet 以便于维护:

@echo off
setlocal
set "ps=Add-Type -AssemblyName System.windows.forms | Out-Null;"
set "ps=%ps% $f=New-Object System.Windows.Forms.OpenFileDialog;"
set "ps=%ps% $f.Filter='Model Files (*.mod)|*.mod|All files (*.*)|*.*';"
set "ps=%ps% $f.showHelp=$true;"
set "ps=%ps% $f.ShowDialog() | Out-Null;"
set "ps=%ps% $f.FileName"

for /f "delims=" %%I in ('powershell "%ps%"') do set "filename=%%I"

if defined filename (
    echo You chose %filename%
) else (
    echo You didn't choose squat!
)

goto :EOF

(PowerShell 命令无情地从Just Tinkering 博客中窃取。)请参阅OpenFileDialog 类文档以了解您可以设置的其他属性,例如TitleInitialDirectory

于 2013-03-27T12:23:39.107 回答