有效批处理文件变量名称?

fuz*_*965 0 variables numbers file numeric batch-file

我有批处理文件的以下问题.我简化了下面的问题.

运行以下批处理文件foo.bat将返回word标准输出(在本例中为命令提示符窗口),而不是hey.

foo.bat

@SET 1word="hey"
@ECHO %1word%
Run Code Online (Sandbox Code Playgroud)

但是,echo %1word%从命令行执行返回hey.

这应该/可能是这样的原因吗?是否不允许数字为环境变量名称添加前缀?

dbe*_*ham 6

您可以创建和使用名称以数字开头的环境变量,但这不是一个好主意,应该避免使用.定义变量没问题.但是使用正常百分比扩展进行扩展是一个问题

问题是批量解析器看到的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!
Run Code Online (Sandbox Code Playgroud)

- 样品输出 -

arg 1 = "Argument 1 value"
1var normal = "Argument 1 value"var
1var delayed = Environment variable value.
Run Code Online (Sandbox Code Playgroud)

请注意,表单的参数扩展%1只是批处理脚本中的一个问题 - 它与命令提示符(非批处理)上下文中发出的命令无关.因此,您可以从命令提示符定义1word,然后在命令提示符下echo %1word%正常工作.

由于复杂性,故事的寓意是 - "不要使用以数字开头的变量名称".