批处理文件:构建跨多行的字符串但实际上不产生多行字符串?

批处理文件:构建跨多行的字符串但实际上不产生多行字符串?

我正在使用 CLI 并传递如下所示的开关和参数,其中参数包含在内"并包含一系列由 : 分隔的子参数(表达式);

-switch "a long expression; another long expression; yet another; and hey one more"

我想要做的是这样的,我可以构造跨多行的字符串,而无需实际将多行字符串传递给 EXE:

-switch "very long arg; ^
another long arg; ^
yet another; 
and another"

尽管有多行,我仍然会传递上面那一行的单行字符串。

更新:当我输入这段文字时,我刚刚发现了一种可以让它工作的技巧:

set myswitch=a long expression; ^
another long expression; ^
yet another; ^
and hey one more
-switch "%myswitch%"

它确实有效,但我希望采用更内联的方法,如我之前的示例所示。有没有办法在 Windows 7 批处理文件中实现这一点?(除非您需要升级到 Windows 10)

答案1

为什么不:set "myswitch=strings"
set "myswitch=%var% more strings"


这如何帮助我构建跨多行的命令行字符串,并且比我在 OP 中的“破解”版本更简洁? – oscilatingcretin 7 分钟前

  • 好吧,你自己看看哪一个更具可读性。

set "myswitch=a long expression; "
set "myswitch=%myswitch% another long expression; "
set "myswitch=%myswitch% yet another; and hey one more"

exec -switch %myswitch%

set myswitch=a long expression; ^
another long expression; ^
yet another; ^
and hey one more
-switch "%myswitch%"

答案2

根据您之前的评论,您可能会发现维护起来更容易。

@ECHO on
rem demo def ! prior to enabling expansion if required in Args strings
Set "Ex=^^^!"
Setlocal EnableDelayedExpansion
%= [ Paramater list for ... ] =% For %%L in (
"Arg 1 !Ex!"
"Arg 2"
"Arg 3"
"Arg 4"
"Arg 5"
"Arg 6"
"Arg 7"
)Do For /F "Delims=" %%v in ("%%~L")do If not "!Switch!" == "" (Set "Switch=!Switch! %%~v;") Else (Set "Switch=%%~v;")
Set "Switch=-switch "!Switch:~,-1!""
Echo/!Switch!
Endlocal

相关内容