2011-09-30 30 views
5

Tôi đã tự hỏi về độ dài tối đa của nhãn trong một tệp lô.Hàng loạt: chiều dài nhãn

tôi thấy this Microsoft article nêu:

MS-DOS nhận chỉ có tám ký tự đầu tiên của một nhãn tập tin thực thi; các ký tự tiếp theo bị bỏ qua.

Họ cũng cung cấp một ví dụ:

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

mà là vụ phải ra

two 
three 

thay vì

three 

Nhưng trên hệ thống của tôi, tôi nhận được

three 

Tôi đã thử trên Windows 7 (6.1.7600) và WindowsXP (5.1.2600) và nhận được kết quả tương tự trên cả hai.

Dường như với tôi không có giới hạn tám ký tự! Tôi có thiếu gì đó không?

+0

Tôi biết nó đã được trả lời, nhưng nguyên nhân gốc rễ của sự nhầm lẫn là MS-DOS so với lệnh cửa sổ lien – PsychoData

Trả lời

10

Các giới hạn là 2047 và 8192, tùy thuộc vào hệ điều hành của bạn. Xem this KB article.

+0

+1 Để tìm giới hạn thực tế –

+0

Theo KB, giới hạn không phụ thuộc vào 32 so với 64 bit ; 2047 ký tự cho Windows NT4/2000, 8191 đối với Windows XP và sau đó là –

+0

Hãy nhớ xem câu trả lời của M M. nếu bạn muốn hiểu 'Tại sao' – PsychoData

1

Tôi khá chắc chắn giới hạn 8 ký tự đã biến mất khi Windows di chuyển khỏi nền tảng MS-DOS sau Windows 98. Tất cả các hệ điều hành Microsoft bắt đầu với Windows 2000 không còn có giới hạn. Cửa sổ lệnh mà chúng ta thấy ngày hôm nay trong Windows 7 và các cửa sổ khác là một ứng dụng chạy trên Windows, chứ không phải là triển khai cũ hơn khi cửa sổ lệnh truy cập lớp MS-DOS chạy bên dưới Windows.

5

Ví dụ này là đúng cho MS-DOS không cmd.exe. Phiên bản cmd.exe của bạn cao hơn MS-DOS. Vui lòng sử dụng bất kỳ độ dài nhãn nào.

Theo bài báo đó, hạn chế này có hiệu lực:

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

Lệnh Windows 7 CMD và BAT sử dụng GOTO: LABEL không giới hạn 8 ký tự sau ký tự ":" như được ghi ban đầu bởi áp phích gốc khi chúng được thực thi trực tiếp hoặc GỌI từ tệp lô khác.

tức,

@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 

Kết quả của việc này là: biến của bạn là "2"

Nếu tôi đặt BIẾN = 4 kết quả là: biến của bạn là "4"

Vì vậy, bây giờ DOS nhìn thấy ngay cả tên tương tự (bắt đầu ký tự) là nhãn duy nhất ngay cả khi cùng một nội dung của một nhãn ngắn hơn tồn tại trong tập tin thực thi trước.