【发布时间】:2018-08-19 02:18:48
【问题描述】:
FroG 帮助您基于 XML 为您的 Windows 批处理 (.bat) 文件构建 GUI。
例如设置三个变量并打印到文本文件,所以 .bat 看起来像这样:
@echo off &setlocal
setlocal EnableDelayedExpansion
set var1=%1
shift
set var2=%1
shift
set var3=%1
echo %var1% %var2% %var3%> test.txt
(据我了解,您必须通过 shift 才能让 FroG 赶上变量?我无法以任何其他方式使其工作,我从一些基于 FroG 的示例中获取了这个)
GUI 代码如下所示:
<form caption="test GUI" program="test.bat" icon="" showconsole="false" width="514" url="" description="" author="">
<control type="tabset">
<tabsheet caption="General" active="true">
<control type="groupbox" caption=" Basic info " fontstyle="bold">
<control type="edit" caption=" Variable 1 " commandline="" width="100"/>
<control type="edit" caption=" Variable 2 " commandline="" width="100"/>
<control type="edit" caption=" Variable 3 " commandline="" width="100"/>
</control>
</tabsheet>
</control>
</form >
(在三个字段中输入的值被传递到底线test.bat ...,在我看来,shift 忽略了最后一个变量有一个空格并且只打印three,所以底线@ 987654330@ 必须在引号中,但是如果您手动添加引号,它们也会打印到文件中,这是我们不希望的,请参见下面的第 4 段)
如您所见,我们已经设置了值,var1 是“一”,var2 是“二”,var3 包含一个空格并且是“三四”。
单击执行后,我的 test.txt 中的输出为
one two three。但它缺少 var3 中的“四”。现在我尝试将我的变量包装在 .bat 中,例如
set "var3=%1"但得到相同的结果。或
set var3="%1",但它打印“三”和引号one two "three"仍然没有“四”。我尝试在 GUI 中使用
"three four"之类的引号输入“三四”,它会打印“四”部分,但这是错误的,因为它打印的是我们刚刚输入的引号,我们不想要那个one two "three four"。
预期结果应该是one two three four,带有空格且不带引号。
更新
做了更多的测试,发现没有shift我们也能达到同样的效果,但是像这样:
set var1=%1
set var2=%2
set var3=%3
同样的问题仍然存在,打印在 cli 或文件中,如果变量不在 GUI 上的引号中,它会跳过最后一个字符串,但如果是,那么它也会打印引号。
TLDR:需要在 GUI 中传递带引号的字符串(因为字符串中有空格),但不打印引号。
【问题讨论】:
标签: xml user-interface batch-file command-line window