2011-09-30 90 views
5

我想知道批处理文件中标签的最大长度。批处理:标签长度

我发现this Microsoft article指出:

MS-DOS只能识别一个批处理文件标签的前八个字符;后续字符被忽略。

他们还提供了一个例子:

@echo off 
goto latestch 
:latestchanges 
echo two 
:latestch 
echo three 

这是应该输出

two 
three 

,而不是

three 

但是我的系统上,我得到

three 

我在Windows 7(6.1.7600)和WindowsXP(5.1.2600)上试过,并且在它们上都得到相同的结果。

它在我看来没有八个字符的限制! 我错过了什么吗?

+0

我知道它已被回答,但造成混淆的根本原因是MS-DOS与Windows命令留置权 – PsychoData

回答

10

的限制是2047和8192,根据您的操作系统。请参阅this KB article

+0

+1查找实际限制 –

+0

根据KB,限制不取决于32位与64位; 2047个字符用于Windows NT4/2000,8191用于Windows XP及更高版本 –

+0

如果您想了解M的答案,请务必查看M M.的答案。 – PsychoData

1

我敢肯定的8个字符的限制就走了当Windows Windows 98中移动后从MS-DOS平台远微软操作系统从Windows 2000开始不再有限制。我们今天看到的Windows 7和其他人的命令窗口是在Windows上运行,而不是早期的实现,其中命令窗口中访问的Windows下的MS-DOS层运行的应用程序。

5

该示例对于MS-DOS而不是cmd.exe为真。您的cmd.exe版本高于MS-DOS。随意使用任何长度的标签。

根据这篇文章,这个限制的有效期为:

Microsoft MS-DOS 4.01 Standard Edition 
Microsoft MS-DOS 5.0 Standard Edition 
Microsoft MS-DOS 5.0a 
Microsoft MS-DOS 6.0 Standard Edition 
Microsoft MS-DOS 6.2 Standard Edition 
Microsoft MS-DOS 6.21 Standard Edition 
Microsoft MS-DOS 6.22 Standard Edition 
0

使用GOTO:LABEL的Windows 7 CMD和BAT批处理命令并不局限于直接执行或从另一个批处理文件调用它时原始海报最初指出的“:”字符后的8个字符。

@echo off 
SET VARIABLE=2 
if %VARIABLE%.==. GOTO :LABELNUMBERZERO 
if %VARIABLE%.==1. GOTO :LABELNUMBERONE 
if %VARIABLE%.==2. GOTO :LABELNUMBERTWO 
if %VARIABLE%.==3. GOTO :LABELNU 
if %VARIABLE%.==4. GOTO :LABELN 
GOTO :ENDTHISLONGTHING 
:LABELNUMBERZERO 
echo your variable was " " 
GOTO :ENDTHISLONGTHING 
:LABELNUMBERONE 
echo your variable was "1" 
GOTO :ENDTHISLONGTHING 
:LABELNUMBERTWO 
echo your variable was "2" 
:ENDTHISLONGTHING 
:LABELNU 
echo your variable was "3" 
:ENDTHISLONGTHING 
:LABELN 
echo your variable was "4" 
:ENDTHISLONGTHING 

这样做的结果是: 你的变量是 “2”

如果我设置变量= 4的结果是: 你的变量是 “4”

所以DOS现在看到连类似的命名(开始字符)作为唯一的标签,即使在批处理文件中存在的短标签相同内容的事前。