【发布时间】:2021-06-20 22:24:48
【问题描述】:
我是否应该始终将setlocal enableDelayedExpansion 放在批处理脚本的开头,即使我不需要它?
它对性能有什么影响,还是会引起什么问题?
【问题讨论】:
-
每个脚本都不需要延迟扩展,处理包含
!感叹号的路径或字符串时需要考虑。 -
不,你不应该。只有在真正需要时才应启用延迟扩展,因为它会导致对每个命令行进行双重解析,并导致文件/文件夹名称或其他包含感叹号的字符串出现问题。出于这个原因,
setlocal enableDelayedExpansion应该只在真正需要并且知道文件/文件夹名称和其他字符串中与!相关的后果时使用。我建议阅读 this answer 的 issue 章节,了解有关如何编写批处理文件的一般提示。 -
双重解析,但不是双重执行。我将成为异议的声音,并说处理包含
!的文件名确实是不延迟扩展的唯一原因,除此之外,我想不出一个不这样做的其他原因.和空格一样,感叹号也不应该出现在文件名中。
标签: batch-file