2009-08-01 46 views
7

Tôi đang tạo tệp loạt Windows có thể trở nên khá lớn, giả sử một vài megabyte. Tôi đã tìm kiếm các giới hạn có thể về kích thước tệp tối đa và độ dài tối đa của một dòng trong một tệp lô, nhưng tôi không thể tìm thấy bất kỳ thứ gì. Bất kỳ kinh nghiệm thực tế?Giới hạn kích thước tệp và giới hạn độ dài dòng cho các tệp hàng loạt của Windows

+0

Nếu không đi vào chính xác những gì bạn đang có kế hoạch để viết vào tập tin thực thi, có vẻ như với tôi rằng nếu bạn cần viết vài megabyte của nó, bạn đang làm điều gì đó sai trái. Megabyte lô không tấn công tôi như một thiết kế tốt. –

+0

bạn nói đúng. đó là giải pháp nhanh chóng - nhưng đó là cách nhanh nhất để đi. – zedoo

Trả lời

8

Tôi nghĩ rằng việc kích thước tệp có thể lên tới 2 GB, thậm chí có thể nhiều hơn. Đó là một ngôn ngữ diễn giải, vì vậy nếu điều này được thực hiện đúng, giới hạn kích cỡ tệp phải là giới hạn kích cỡ tệp của hệ thống tệp. Tôi không bao giờ có bất kỳ lỗi nào với các tệp hàng loạt quá lớn và một số tệp mà tôi đã tạo có kích thước là vài MB.

Nên có giới hạn độ dài dòng, nhưng phải lớn hơn 256. Điều này có thể dễ dàng được kiểm tra, chỉ cần thực hiện một số "set A = 123456789012 ... endofline", sau đó "echo% A%" và bạn sẽ thấy bạn có thể đi bao xa.

Nó hoạt động cho tôi với các dòng rất dài (khoảng 4K), nhưng tại 8K echo cho một thông báo "Dòng quá dài", vì vậy 8192 byte phải là một số giới hạn.

Bây giờ thử nghiệm để kích hoạt, quá, thử nghiệm với "echo off", hàng ngàn dòng thiết lập, sau đó "echo end", và nó làm việc cho một tập tin 11 MB (mặc dù phải mất một vài giây để kết thúc :) - không giới hạn trong tầm nhìn ở đây.

110 MB cũng đã hoạt động. Như thế này đủ chưa? ;)

+0

đẹp. cảm ơn cho thử nghiệm này cho tôi :-) 8k âm thanh rất nhiều, vì vậy tôi sẽ hy vọng điều này là đủ. Nếu không, tôi có thể chia đôi đường với chiếc mũ nhỏ này ^? – zedoo

+2

Không, chỉ cần thử nghiệm, quá. 8K có vẻ là một giới hạn khó khăn, ngay cả khi chia tách. – schnaader

+3

Cũng lưu ý rằng điều này là dành cho các dòng cuối cùng (với các biến được thay thế), do đó, echo% a %% a% sẽ thất bại nếu% a% là chuỗi dài hơn 4K! – schnaader

2

Một số ý tưởng, không nhất thiết phải loại trừ lẫn nhau:

  • Đổi thành PowerShell.
  • Chuyển sang ứng dụng hướng dữ liệu để tất cả các công cụ biến được lưu trữ trong tệp dữ liệu (CSV, văn bản, bất kỳ thứ gì) và kết quả là bạn có thể có tập lệnh soạn thảo nhỏ hơn, mở tệp dữ liệu và hoạt động .
0

Nó phải hoạt động tối thiểu 2 GB. Các dòng được đọc trực tiếp từ tệp BAT trên đĩa (không có bộ nhớ đệm liên quan). Tôi đưa ra tuyên bố này vì những điều sau đây:

Thực tế bạn có thể chỉnh sửa tệp BAT trong khi đang chạy! Và nó sẽ hoạt động ngay cả khi trình chỉnh sửa văn bản có thể đổi tên phiên bản gốc và lưu phiên bản mới ở vị trí mới trên đĩa . Miễn là bạn cẩn thận không chèn văn bản ở trên lệnh hiện đang thực hiện. Các dòng có thể được thay đổi/chèn/xóa bên dưới lệnh hiện tại đang thực thi và các dòng mới sẽ là các dòng được thực hiện. Tôi có thường thực hiện việc này với các tệp BAT có chứa một danh sách dài các lệnh wget , mỗi lệnh mất hàng chục phút để thực thi.

2

Một dòng duy nhất không được vượt quá 8192 ký tự, ngay cả sau khi việc mở rộng %var% hoặc !var! biểu thức, nếu không bạn có một lỗi.

Không có giới hạn (đã biết) cho chính tệp đó.

2

Độ dài tối đa của bất kỳ dòng lệnh (hoặc biến nào) trong CMD là 8191 characters.

Các vấn đề liên quan