我疯狂地做一些相对容易的事情...... 我在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>
有人可以帮忙吗?
答案 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