2009-08-01 13 views
7

Generuję plik wsadowy systemu Windows, który może stać się dość duży, powiedzmy kilka megabajtów. Szukałem możliwych ograniczeń dotyczących maksymalnego rozmiaru pliku i maksymalnej długości wiersza w pliku wsadowym, ale nie mogłem znaleźć niczego. Jakieś praktyczne doświadczenia?Ograniczenia rozmiaru pliku i długości linii plików wsadowych systemu Windows

+0

Bez wchodzenia w to, co dokładnie zamierzasz napisać do tego pliku wsadowego, wydaje mi się, że jeśli potrzebujesz napisać kilka megabajtów tego, robisz coś nie tak. Megabajty partii nie wydają mi się dobrym projektem. –

+0

masz rację. Jest to szybkie i nieaktualne obejście - ale jest to najszybsza droga. – zedoo

Odpowiedz

8

Myślę, że rozmiar pliku może wynosić nawet 2 GB, a może nawet więcej. Jest to język interpretowany, więc jeśli zostanie to zrobione poprawnie, limit rozmiaru pliku powinien być limitem rozmiaru pliku systemu plików. Nigdy nie miałem żadnych błędów, gdy pliki wsadowe były zbyt duże, a niektóre z tych, które utworzyłem, miały kilka MB.

Powinien być limit długości linii, ale powinien być większy niż 256. Można to łatwo przetestować, po prostu wykonaj kilka "ustaw A = 123456789012 ... endofline", po tym "echo% A%", i zobaczysz, jak daleko możesz się posunąć.

Działa dla mnie z bardzo długimi liniami (około 4K), ale przy 8K echo wyświetla komunikat "Linia zbyt długa", więc 8192 bajty powinny być pewnym ograniczeniem.

Teraz testowany również pod względem rozmiaru, testowany z "echem off", setkami setów wierszy, po "echo end", i działał na plik 11 MB (choć zajęło to kilka sekund :) - nie Ogranicz widoczność tutaj.

110 MB również zadziałało. Czy to wystarczy? ;)

+0

nice. dziękuję za przetestowanie tego dla mnie :-) 8k brzmi bardzo, więc mam nadzieję, że to wystarczy. W przeciwnym razie mógłbym podzielić linie z tym małym kapeluszem ^? – zedoo

+2

Nie, po prostu przetestowałem. 8K wydaje się być twardym limitem, nawet przy dzieleniu. – schnaader

+3

Należy również zauważyć, że dotyczy to linii końcowych (z wymienionymi zmiennymi), więc echo% a %% a% nie powiedzie się, jeśli% a% jest łańcuchem dłuższym niż 4K! – schnaader

2

Niektóre pomysły, niekoniecznie wzajemnie się wykluczają:

  • Przełącz na PowerShell.
  • Przełącz na aplikację opartą na danych, tak aby wszystkie zmienne dane były przechowywane w pliku danych (CSV, tekst, cokolwiek), w wyniku czego możesz mieć mniejszy skrypt ze skróconą konfiguracją, który otwiera plik danych i działa .
0

Powinien działać co najmniej do 2 GB. Linie są odczytywane bezpośrednio z pliku BAT na dysku (nie ma potrzeby buforowania ). Składam takie oświadczenie z następujących powodów:

W rzeczywistości można edytować plik BAT, gdy jest uruchomiony! I będzie działał , nawet jeśli edytor tekstu może zmienić nazwę oryginalnej wersji i zapisać nową wersję w nowym miejscu na dysku . Dopóki nie będziesz wstawiał tekstu powyżej aktualnie wykonywanego polecenia. Linie mogą być zmienione/wstawione/usunięte poniżej aktualnie wykonywanego polecenia , a nowe linie zostaną wykonane. Mam często często to zrobić z plikami BAT zawierającymi długą listę poleceń wget w postaci , z których każda zajmuje kilkadziesiąt minut na wykonanie.

2

Pojedyncza linia nie powinna przekraczać 8192 znaków, nawet po rozszerzeniu %var% lub !var! wyrażeń, jeszcze masz błąd.

Nie ma (znanych) ograniczeń dla samego pliku.

Powiązane problemy