批量使用剪辑时转义字符

Escape Characters When Using Clip in Batch

在命令行上运行的命令是for /f "tokens=1* delims= " %A in ('nslookup myip.opendns.com. resolver1.opendns.com 2^>NUL^|find "Address:"') Do (echo %B)

在成为 for /f "tokens=1* delims= " %%A in ('nslookup myip.opendns.com. resolver1.opendns.com 2^>NUL^|find "Address:"') Do (echo %%B) 的批次中有效

但是要复制到剪贴板,我需要对 2^>NUL^| 中的转义字符进行更多操作。在批次中,我得到的最接近的 echo.for /f "tokens=1* delims= " %%A in ('nslookup myip.opendns.com. resolver1.opendns.com 2^^^>NUL^^^|find "Address:"') Do (echo %%B)|clip

其输出为 for /f "tokens=1* delims= " %A in ('nslookup myip.opendns.com. resolver1.opendns.com 2>NUL|find "Address:"') Do (echo %B),由于 2>nul| 未正确转义而失败。

我尝试向 2>NUL| 添加第四个甚至第五个插入符号以尝试将输出剪辑为 2^>nul^| 但我无法弄清楚。可能吗?

你的命令行被解析了几次,所以你必须使用足够的转义来隐藏所有的特殊字符:

echo for /F "tokens=1* delims= " %%A in ('nslookup myip.opendns.com. resolver1.opendns.com  2^^^^^^^> nul ^^^^^^^| find "Address:"'^) Do (echo(%%B^) | clip

首先解析整个命令行,结果如下:

echo for /F "tokens=1* delims= " %%A in ('nslookup myip.opendns.com. resolver1.opendns.com  2^^^> nul ^^^| find "Address:"') Do (echo(%%B) | clip

接下来再次解析管道的每一侧 (|),因此左侧结果为这一行:

echo for /F "tokens=1* delims= " %%A in ('nslookup myip.opendns.com. resolver1.opendns.com  2^> nul ^| find "Address:"') Do (echo(%%B)

如您所见,我也对右括号进行了转义,因此代码甚至可以在带括号的代码块中使用。