1

我正在开发一个将编译为批处理脚本的 DSL(为了好玩......)。我正在尝试进行函数调用,如下所示:DSL 使用名为 param1 的参数定义函数。该批次定义了一个带有 param1=%1 的标签。DSL 定义了一个具有某些价值的调用。批次定义一个空格后的值的调用。

问题是如果值有空格,它被定义为两个参数。我可以用 ^ 转义空格,但是如果我试图转义双引号,它就会搞砸。

任何人都可以帮助我进行最终的批处理参数转义吗?

顺便说一句,它是用 MPS 编写的,如果你想要它就在这里:https ://github.com/TheAnosmic/MPSBatch

4

2 回答 2

0

最简单的解决方案是使用双引号来调用您的参数。

但是,如果这个参数包含一些双引号,它就不起作用。在这种情况下,我们可以基于 eckes 的解决方案来实现一个解决方案:我们可以在函数中做一个循环来读取所有参数并将它们复制到函数的参数中。

例如,这可能看起来像这样:

@echo off

set var=With "" and a space
call :call_var %var%
goto:EOF

:call_var
set param=
for /F " delims==" %%V in ("%*") do @set param=%param% %%V
REM Test parameter
echo %param%
goto:EOF
于 2015-03-04T05:03:16.140 回答
0

我认为没有确定可靠的方法。批处理解析器真的很丑。例如,如果您有一个带有关闭的变量),则以下回显将中断:

set VAR=Program Files (x86)
echo var=%VAR%.

在某些情况下,使用 FOR 会有所帮助

@set VAR=a * b "test" c ()
@for /F " delims==" %%V in ("%VAR%") do @echo var=%%V.

将打印

C:\Users>test.cmd
var=a * b "test" c ().
于 2014-04-17T21:29:15.833 回答