use*_*622 32 batch-file parentheses
这就是我想要做的:
(
@echo This is some code that is
@echo Important to echo exactly as-is
@echo Even if I use parenthesis
@echo for something (like this)
)|clip
Run Code Online (Sandbox Code Playgroud)
所以将其复制到剪贴板中.我尝试过以下方法:
(
@echo This is some code that is
@echo Important to echo exactly as-is
@echo Even if I use parenthesis
@echo for something ^(like this^)
)|clip
Run Code Online (Sandbox Code Playgroud)
但这似乎也影响了我的WANTED括号因为我收到错误.为了测试这个,我简单地完成了:
(
@echo This is some code that is
@echo Important to echo exactly as-is
@echo Even if I use parenthesis
@echo for something ^(like this^)
FFF
)|clip
Run Code Online (Sandbox Code Playgroud)
嘿! 这几乎可以工作,文本一直复制到"this"中的"s".它不会复制最后的括号,或者显然是F的.有任何想法吗?
jeb*_*jeb 42
很明显你需要三个插入符号:-)
(
@echo This is some code that is
@echo Important to echo exactly as-is
@echo Even if I use parenthesis
@echo for something (like this^^^)
)|clip
Run Code Online (Sandbox Code Playgroud)
为什么?这有点棘手......
首先解析器解析块并将部分转义this^^^)为this^),第一次将括号转义到此处.
但是当您使用管道时,完整的块将被转换并转移到新的cmd.exe实例.
C:\Windows\system32\cmd.exe /S /D /c" ( @ echo This is some code is ... & @ echo for something (like this^) )"
在新的实例中,有必要再次逃避右括号.
就这样!
有关更多信息,您可以阅读类似的问题
:为什么延迟扩展在管道代码块内部失败
小智 5
如果您对插入符号计数感到困惑,请记住,它始终是2减去1的幂。另外,请记住,第一次添加2,第二次添加4,第三次添加8,...
例如,(在XP上测试)
(
for /f "tokens=* delims=" %%S in (
'echo X^^^^^^^^^^^^^^^& ^^^^^^^^^^^^^^^| ^^^| find " "'
) do @echo %%S
) | find "X"
Run Code Online (Sandbox Code Playgroud)
在DOS解析批处理文件时,通常首先读取echo语句(1),其次是因为它是管道内部命令(DOS似乎希望管道中有程序,而内部命令不是程序)(3),第三是因为它位于一个“ for / f”命令驱动的单词列表(请参阅/?)(7),以及由于该线程中已经给出的原因而第四次(15)。
我可能还注意到,就我个人而言,我认为这是草率的编码,以免对热字符进行适当的转义,因为DOS碰巧忽略了这种特殊情况下丢失的转义。因此,如果我想在上述示例中回显一对括号,即使开头的括号不需要,也要给每个15个插入号。这样,阅读我的代码的任何人都不必怀疑为什么引用了一个括号而没有引用另一个。以及如何在代码修改下修改引用。