fuz*_*965 0 variables numbers file numeric batch-file
我有批处理文件的以下问题.我简化了下面的问题.
运行以下批处理文件foo.bat将返回word标准输出(在本例中为命令提示符窗口),而不是hey.
@SET 1word="hey"
@ECHO %1word%
但是,echo %1word%从命令行执行返回hey.
这应该/可能是这样的原因吗?是否不允许数字为环境变量名称添加前缀?
您可以创建和使用名称以数字开头的环境变量,但这不是一个好主意,应该避免使用.定义变量没问题.但是使用正常百分比扩展进行扩展是一个问题
问题是批量解析器看到的inital %1在%1word%和扩展的第一个参数,而不是可变的.即使没有传递参数,它仍然将不存在的第一个参数扩展为空字符串.这些规则在/sf/answers/286659341/和/sf/answers/557963871/上进行了解释.
您可以使用延迟扩展来访问变量.
这是一个演示问题的示例脚本:
@echo off
setlocal enableDelayedExpansion
set "1var=Environment variable value."
call :test "Argument 1 value"
exit /b
:test
echo arg 1 = %1
echo 1var normal = %1var%
echo 1var delayed = !1var!
- 样品输出 -
arg 1 = "Argument 1 value"
1var normal = "Argument 1 value"var
1var delayed = Environment variable value.
请注意,表单的参数扩展%1只是批处理脚本中的一个问题 - 它与命令提示符(非批处理)上下文中发出的命令无关.因此,您可以从命令提示符定义1word,然后在命令提示符下echo %1word%正常工作.
由于复杂性,故事的寓意是 - "不要使用以数字开头的变量名称".
| 归档时间: | 
 | 
| 查看次数: | 3084 次 | 
| 最近记录: |