在batch file中使用“#”(井号)

我遇到了一个使用#batch fileportableshell.bat版本的Strawberry Perl中的portableshell.bat),我不明白为什么。 我在网上search,但似乎没有提及这种用法。 我需要模仿batch file的function,但是我很警惕不这样做,而不理解它到底是什么。

这里#的目的是什么:

 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 ,供参考)

#字符在那里,以便在比较中正确地处理空值/未定义值,即,如果变量对它们进行评估,则避免与未定义的值进行比较。

这个目的几乎可以用于任何角色(只要在这方面没有其他含义)。 常见的选择是[]{}""也可以使用。

据dbenham在评论中说,使用除了""之外的任何东西通常是不好的做法。 当变量具有自己的引号时,引号可能失败,但当展开的变量不能拥有它们时,引号可能是安全的,就像展开路径时一样。 在所有情况下,唯一安全的方法是延迟扩张 。

另外,没有理由围绕一个变量扩展#[或任何使用。 在批处理文件的情况下,显然只是为了对称。

在这个问题上可以读一点这个 。

感谢CodeCaster的帮助