使用'#'批处理文件中的(井号)

时间:2016-03-08 12:10:29

标签: windows batch-file

我发现使用portableshell.bat的便携版Strawberry Perl)的批处理文件(#),我无法理解原因。我在网上搜索过,但似乎没有提到这种用法。我需要模仿批处理文件的功能,但我很谨慎,不知道它究竟做了什么。

这里#的目的是什么:

set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%

在这里:

if not #%1# == ## "%drivep%\perl\bin\perl.exe" %* & goto END

(这里是整个文件的pastebin,供参考)

1 个答案:

答案 0 :(得分:6)

#字符存在,以便在比较中正确处理null / undefined值,即避免在变量对它们进行求值时与未定义的值进行比较。

此目的几乎可以由任何角色提供(只要在此上下文中没有其他含义)。常见的选择是[]{}。也可以使用""

  

根据评论中的dbenham,使用""以外的任何内容通常都是不好的做法。当变量有自己的引号时,引号可能会失败,但当扩展变量不能拥有引号时,引用会很安全,就像展开路径时一样。在所有情况下唯一安全的方法是delayed expansion

     

此外,没有理由使用#[或其他任何内容包围变量扩展。对于问题的批处理文件,显然只是为了对称。

可以阅读in this question

感谢CodeCaster提供的帮助