批处理文件中 % 和 %% 之间的区别
在批处理文件中使用时,批处理程序员经常会混淆单百分号 (%) 和双百分号 (%%)。 在命令行上执行时,FOR 命令使用 %f,而在批处理文件中,它使用 %%f 而不是单个百分号。
符号 %
、%%
、%variable%
和 !variable!
有一些基本差异,并且在命令行和批处理文件中使用不同。
本文介绍了批处理文件中 %
和 %%
之间的区别。 它还讨论了批处理文件和 cmd 中 %
和 %%
的使用,以及环境变量和循环变量。
在 CMD 中使用 % 和 %%
在命令行 shell 中,%变量指定单个字母的可替换参数。 Ms-DOS 使用 %1,%2,...,%9 作为可替换的命令行参数,即 %1 将被传递到批处理文件的第一个参数替换。
以下示例显示带有变量 (%a) 的单个百分号充当空字符:
set a="Hello World"
echo %a
当变量两边都使用百分号时,即%VARIABLE%,它充当环境变量,并在与 echo 命令一起使用时显示设置值。 %VARIABLE% 可以使用 set 命令进行设置并使用 echo 命令进行访问。
示例如下所示。
set a="Hello World"
echo %a%
在批处理文件中使用 % 和 %%
在批处理文件中,命令行 shell 从左到右读取所有命令。 如果它读取百分号,则会继续检查下一个字符。
它将 %%
读取为单个 %
,即将 %%
替换为单个百分比并读取第三个字符。 如果它在 FOR 循环中,它将像在 FOR 循环中一样对其进行计算。
以下示例解释了 FOR 循环中 %% 的使用。
FOR /L %%3 in (1,1,3) Do Echo %%3
PAUSE
输出:
如果不是 FOR 循环,它将作为普通字符读取,并在命令行 shell 中直接执行时与 %variable 命令运行相同。
set a="Hello World"
echo %%a
PAUSE
输出:
如果%号后面的字符是数字,它将被读取为命令行参数。 如果%后面的字符既不是%符号也不是数字,那么它将被读取为变量,直到下一个%符号; 然后,它将显示其值。
例如,
set a="Hello World"
echo %a%
PAUSE
输出:
要在批处理文件中使用纯 % 符号(例如 50%),您需要使用 %% 而不是单个 % 符号。
set a="The battery is charged 50%%"
echo %a%
PAUSE
输出:
%
和 %%
主要用在 FOR 命令中。 当在批处理文件外部使用 FOR 命令时,单个 %
符号效果很好。
但是,在批处理文件中使用时,应将其替换为双 %% 以避免任何错误。 另外,建议避免使用带有 % 符号的数字作为 FOR 命令参数。
在批处理文件中使用延迟扩展
有时,在批处理文件中使用 %VARIABLE% 不会打印结果。 这是因为当完成百分比扩展时,变量在执行之前(即解析时)被扩展。
在循环中使用时,变量仅扩展一次。
为了解决这个问题,您可以使用延迟扩展,即用感叹号 (!variable!
) 代替百分号 (%variable%
)。 当启用延迟扩展时,变量将在执行时扩展。
在循环中,每次迭代时都会扩展它。 因此,使用 ! 扩展变量 建议使用 % 代替,主要是在使用循环时。
要启用延迟扩展,我们可以使用 SETLOCAL EnableDelayedExpansion 命令并将 % 替换为 !,如下例所示。
@echo off
setlocal EnableDelayedExpansion
:: count to 5, storing results in a variable
set n=0
FOR /l %%G in (1,1,5) Do (echo [!n!] & set /a n+=1)
echo Total = %n%
输出:
因此,我们讨论了 %
和 %%
符号在批处理文件和 cmd 中使用时的区别。 我们几乎涵盖了所有内容,包括延迟扩展的使用。
相关文章
Pandas apply, map 和 applymap 的区别
发布时间:2024/04/21 浏览次数:135 分类:Python
-
本教程解释了 Pandas 中 apply()、map()和 applymap()方法的区别。
Pandas 中的 Join 和 Merge 有什么区别
发布时间:2024/04/20 浏览次数:72 分类:Python
-
本文将为我们介绍 pandas 中 join 和 merge 方法之间的区别。
SQL 和 MySQL 的区别
发布时间:2024/03/25 浏览次数:200 分类:MySQL
-
本文解释了 SQL 和 MySQL 之间的五个区别。我们的解释将包括代码和文字,因此你将对 SQL 和 MySQL 之间的区别有一个清晰的了解。
JavaScript call、apply 和 bind 的区别
发布时间:2024/03/22 浏览次数:118 分类:JavaScript
-
本文将帮助你了解 JavaScript 的 call、apply 和 bind 方法的区别。
JavaScript 中 let 和 var 的区别
发布时间:2024/03/20 浏览次数:90 分类:JavaScript
-
本教程描述了两个关键字 var 和 let 在 JavaScript 中的实际区别。