【问题标题】:Pass Windows batch variables with spaces in FroG GUI?在 FroG GUI 中传递带有空格的 Windows 批处理变量?
【发布时间】: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 >

GUI 界面如下所示:

(在三个字段中输入的值被传递到底线test.bat ...,在我看来,shift 忽略了最后一个变量有一个空格并且只打印three,所以底线@ 987654330@ 必须在引号中,但是如果您手动添加引号,它们也会打印到文件中,这是我们不希望的,请参见下面的第 4 段)

如您所见,我们已经设置了值,var1 是“一”,var2 是“二”,var3 包含一个空格并且是“三四”。

  1. 单击执行后,我的 test.txt 中的输出为 one two three。但它缺少 var3 中的“四”。

  2. 现在我尝试将我的变量包装在 .bat 中,例如set "var3=%1" 但得到相同的结果。

  3. set var3="%1",但它打印“三”和引号one two "three" 仍然没有“四”。

  4. 我尝试在 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


    【解决方案1】:

    我已经测试过没有问题,请使用下面的示例!

    test.cmd

    @Echo Off
    
    Set "var1=%~1"
    Set "var2=%~2"
    Set "var3=%~3"
    
    If "%~3"=="" Exit /B
    (Echo=%var1% %var2% %var3%)>"test.txt"
    

    test.frontend

    <form caption="test GUI" program="test.cmd" 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.txt

    one two three four
    

    【讨论】:

    • 嗨!但是看起来您仍然必须手动将变量 3 用引号括起来?只是因为它有空格。因此,每次字符串在任何字段中有空格时,您都必须手动添加引号,漂亮的 ghetto,但它现在可以工作。
    • 如果它有一个空格,那么字符串four 将是一个不同的变量,Variable 4%4;双引号将其定义为单个参数!
    • 但是如果我在 GUI 中有三个字段,今天是一个包含 5 个空格的字符串,明天是一个包含 7 个空格的字符串?
    • 最好建议您使用单个变量来覆盖批处理文件中的所有参数Set "varAll=%*"。或者创建一个包含多个输入条目的前端,比如说 12,然后填写您需要的条目,然后在批处理文件中将最后一行更改为 &gt; "test.txt" Echo %var1% %var2% %var3% %var4% %var5% %var6% %var7% %var8% %var9% %var10% %var11% %var12%
    猜你喜欢
    • 1970-01-01
    • 2018-08-11
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2011-07-07
    相关资源
    最近更新 更多