批处理中的转义函数参数

时间:2014-04-17 20:43:16

标签: windows function batch-file call mps

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

问题是如果值有空格,则将其定义为两个参数。 我可以用^来逃避空间,但是如果我试图逃避双引号,那就搞砸了。

任何人都可以帮我解决最终的批量参数问题吗?

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

2 个答案:

答案 0 :(得分: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 ().

答案 1 :(得分: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