我正在使用 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