以1个字符串连接文件对话框的输出

时间:2016-05-27 13:07:06

标签: batch-file

我疯狂地做一些相对容易的事情...... 我在bat文件中使用File / folder chooser dialog from a Windows batch script中的代码打开文件对话框,让用户选择多个文件。 接下来我需要做的是在单个字符串中连接选择的结果,以作为参数传递给另一个应用程序。我没有连接字符串......

我拥有的是:

<# : chooser.bat
:: launches a File... Open sort of file chooser and outputs choice(s) to the console
:: https://stackoverflow.com/a/15885133/1683264

@echo off
setlocal

set slctn=

for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0} | out-string)"') do (
    echo You chose %%~I
    set slctn=!slctn!|%%~I
)

REM here use %slctn% in another command
echo %slctn%
goto :EOF

: end Batch portion / begin PowerShell hybrid chimera #>

Add-Type -AssemblyName System.Windows.Forms
$f = new-object Windows.Forms.OpenFileDialog
$f.InitialDirectory = "C:\Users\Public\Documents\MCI\Sito Web"
$f.Title = "Seleft PDF files to merge"
$f.Filter = "PDF Files (*.pdf)|*.pdf|All Files (*.*)|*.*"
$f.ShowHelp = $true
$f.Multiselect = $true
[void]$f.ShowDialog()
if ($f.Multiselect) { $f.FileNames } else { $f.FileName }

我得到的结果是:

C:\Users\Public\Documents\MCI\Sito Web\Insieme>MergePDFInsieme
You chose C:\Users\Public\Documents\MCI\Sito Web\Ristorante\2016-02-08\menugiornaliero.pdf
'C:\Users\Public\Documents\MCI\Sito' is not recognized as an internal or external command, operable program or batch file.

C:\Users\Public\Documents\MCI\Sito Web\Insieme>

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

你的问题是pipesymbol(|),它由解析器执行。 set slctn=!slctn!|%%~I为您提供错误消息,因为它被解析为set slctn=!slctn!并将其输出(为空)传递给另一个命令,在这种情况下是%%I的内容。

您可以像这样设置变量:set "slctn=!slctn!|%%~I"(您可以使用set slctn进行验证)。

但是你的行echo %slctn%会遇到同样的问题。您必须在字符串周围使用qoutes才能正确回显:echo "%slctn%" 如果显示引号不是一个选项,它会变得有点复杂:
for %%i in ("%slctn%") do echo %%~i