开始时要使用哪些明确的特殊字符来安全地以最高效的方式调用 ECHO Windows 批处理命令?

问题描述 投票:0回答:1

我很早就知道在 ECHO 命令后立即使用特殊字符而不是空格的技术。核心脚本编写人员已经意识到,这样做主要是为了安全地使用 ECHO 命令,其中 ECHO 命令的参数有可能解析为空。如果不使用特殊字符技术,在这种情况下,ECHO 命令将输出 ECHO ON。此外,使用这样的特殊字符具有改变解析行为的优点,以允许在参数本身中安全地使用某些特殊字符,并且似乎在使用某些特殊字符时具有更高的性能。

不久前,我在 Stack Exchange 或其他论坛或问答网站上遇到了一篇处理/帖子,其中广泛分析和比较了不同特殊字符的安全性和性能优势。那篇文章表明,到目前为止我一直在使用的角色

(
虽然是最好的角色之一,但并不是最好的选择,IIRC。一个不同的角色位居榜首,并且某些特殊角色也有一些优点/缺点。

我最近一直在尝试追踪该帖子,但到目前为止还是空的。

我认为该帖子中提供的信息非常有价值,那些使用 SO 的人也会发现这一点。

有人可以访问上述信息,或者有人有兴趣尝试重复上述处理/分析吗?

我当前使用的命令:

ECHO(Hello, World!

尝试过的网络搜索关键字:

windows batch file script echo safe escape character fast
及其变体。

预期:对所有 ASCII 特殊字符进行彻底且最好是详尽的处理。由于 ASCII 字符列表有限且定义明确,我不认为这个问题是主观提出的。然而,如果有人仍然认为它是主观的或过于宽泛,他们可能会将答案限制为以科学和可重复的方式在安全和性能标准下选择一个通过实验发现的最佳角色。

如果没有人在我之前发布这个问题的明确答案,我将尝试自己对角色进行分析并发布答案,可能在几周内或一个月内,如果有时间的话会更快。

我不认为这是偏离主题的,因为这是一个脚本问题,而且这是关于 ECHO 命令的使用。到目前为止我找不到重复的。如果有人认为这个问题在某种程度上可能是主观的,请考虑发表评论而不是否决,这样我至少可以尝试改进问题的提出或措辞方式。欢迎提出建议。 SO 上的人们似乎经常通过投反对票来推动,而没有真正考虑在 OP 尝试改进后花时间进行审查。

注意:这不仅仅是一个关于在批处理文件/CMD 中使用特殊字符的问题,因为大多数其他答案似乎都是关于。

batch-file cmd window special-characters dos
1个回答
1
投票

在我看来,

echo(
是最好也是唯一的选择,因为它几乎适用于所有情况。所有其他变体都有一些缺点。

前段时间,我在

dostips: ECHO 测试了所有可能的 
echo<character> 变体。无法给出文本或空行

我测试了不同的用例:

  1. 它可以回显空行吗
  2. 它可以输出变量中的任意内容吗
  3. 当前目录中有特定文件时是否存在文件系统访问或回显失败。

1.它可以回显空行吗

全部,但是

echo<space>
可以输出空行

2.它可以输出变量中的任何内容吗

有问题的文本为

/?
ON
OFF
..\..\..\..\windows\system32\calc.exe

这些失败只是简单的

/?
或只是
?

set "var=/?"  
echo;%var%
echo,%var%  
echo=%var%  
echo %var%  
set "var=?"  
echo/%var%

这些失败了

..\..\..\..\windows\system32\calc.exe

set "var=..\..\..\..\windows\system32\calc.exe"  
echo\%var%  
echo:%var%  
echo.%var%  

3.是否有文件系统访问权限

当存在相应的文件时,这些变体会失败。

echo[  
echo]  
echo+  
echo.  

获胜者是:

echo(

© www.soinside.com 2019 - 2024. All rights reserved.