Windows 批处理文件集本地混淆

Windows 批处理文件集本地混淆,windows,batch-file,cmd,variable-expansion,delayedvariableexpansion,Windows,Batch File,Cmd,Variable Expansion,Delayedvariableexpansion,我很难理解批处理文件本地化是如何工作的。这里有一个例子来说明我的困惑 @echo off set x=5 set y=1 setlocal enabledelayedexpansion if %y% GEQ 1 ( set x=6 echo %x% echo !x! ) echo %x% endlocal echo %x% 这将打印,565 如果我删除if语句,它会打印,65 真是一团糟! 为什么是这样?在LinuxBash文件中,我确切地知道会发生什么 但不是在这里。 请

我很难理解批处理文件本地化是如何工作的。这里有一个例子来说明我的困惑

@echo off
set x=5
set y=1
setlocal enabledelayedexpansion
if %y% GEQ 1 (
   set x=6
   echo %x%
   echo !x!
)
echo %x%
endlocal

echo %x%
这将打印,
565
如果我删除if语句,它会打印,
65
真是一团糟! 为什么是这样?在LinuxBash文件中,我确切地知道会发生什么 但不是在这里。 请向我解释每个print语句中发生了什么,以及最好的方法是为IF块中修改的变量编码

我不得不使用setlocal来解决另一个问题

@echo off
set x=5
set y=1
if %y% GEQ 1 (
   set x=6
   echo %x%
)
echo %x%

尽管我期望
56
,但这张打印的是
56
。然后我学习了setlocal来解决这个问题,这是另一个令人头疼的问题。

好吧,
if
子句中的
echo%x%
返回整个
if
块执行之前存在的
x
值,这与环境定位无关。当您删除
if
块时,由于没有更多的块,
localization
一词通常意味着为使程序资源在另一种人类文化中工作所做的工作。这将包括语言翻译(英语、德语、日语等)。@lit,虽然您的陈述通常是正确的,但Windows命令提示符中的环境本地化与语言和区域设置完全无关;它将当前工作目录和环境变量的更改定位到某个批处理脚本(第节)…@aschipfl,我想知道使用不同的术语是否会减少混淆。“范围”是指变量的范围吗?环境变量作用域?@lit,这种类型的本地化更多地与许多编程语言中可用的局部变量或函数相关。术语»环境变化本地化«来自Microsoft–键入并输入命令提示符。我同意»scope«可能是一个更好的选择……嗯,
if
子句中的
echo%x%
返回整个
if
块执行之前存在的
x
值,这与环境本地化无关。当您删除
if
块时,由于没有更多的块,
localization
一词通常意味着为使程序资源在另一种人类文化中工作所做的工作。这将包括语言翻译(英语、德语、日语等)。@lit,虽然您的陈述通常是正确的,但Windows命令提示符中的环境本地化与语言和区域设置完全无关;它将当前工作目录和环境变量的更改定位到某个批处理脚本(第节)…@aschipfl,我想知道使用不同的术语是否会减少混淆。“范围”是指变量的范围吗?环境变量作用域?@lit,这种类型的本地化更多地与许多编程语言中可用的局部变量或函数相关。术语»环境变化本地化«来自Microsoft–键入并输入命令提示符。我同意»范围«可能是一个更好的选择…