Zmienić rozmiar pliku w wierszu polecenia?

14

Jak zmienić rozmiar pliku z wiersza polecenia (lub pliku wsadowego)?

  • Musi traktować plik jako plik binarny . Format pliku jest nieistotny i arbitralny.

  • Rozszerzenie pliku powinno uzupełnić go zerami.

  • Zmniejszenie pliku powinno skrócić plik.

Innymi słowy:

Jak powielasz funkcjonalność SetEndOfFilew wierszu polecenia?

użytkownik541686
źródło
Możesz spróbować diskpart .
jpaugh

Odpowiedzi:

10

Nie wierzę, że funkcjonalność istnieje natywnie w powłoce DOS, podejrzewam, że musisz użyć innego programu, aby wykonać zadanie. Oto kilka możliwości:

  1. Istnieje narzędzie o nazwie Trunc, które twierdzi, że robi dokładnie to, czego szukasz:

    Trunc to aplikacja wiersza polecenia systemu Windows do obcinania plików do określonego rozmiaru. Można także użyć do powiększenia pliku.

    Musisz to wypróbować, aby dowiedzieć się, w jaki sposób plik jest wypełniany (np. Zerami lub śmieciami), ale w przeciwnym razie wydaje się, że pasuje to do tego, o co prosisz.

  2. fsutil jest narzędziem systemowym Windows XP i nowszym, które wydaje się mieć pewne funkcje, które mogą pomóc. W szczególności fsutil filepodkomenda wydaje się być w stanie tworzyć, ustawiać długość, a także zerować pliki wypełniania.

    Konkretnie:

    fsutil file createnew "C:\temp\myfile" 1024

    Utworzy 1024 bajtowy plik wypełniony zerą, ale nie widzę sposobu na obcięcie pliku. Istnieje polecenie, które ustawia prawidłową długość danych, ale nie wydaje się modyfikować znacznika EOF jako:

    Korzystanie z setvaliddata

    W systemie plików NTFS istnieją dwie ważne koncepcje długości pliku: znacznik końca pliku (EOF) i ważna długość danych (VDL). EOF wskazuje rzeczywistą długość pliku. VDL określa długość prawidłowych danych na dysku. Wszelkie odczyty między VDL i EOF automatycznie zwracają 0, aby zachować wymaganie ponownego użycia obiektu C2.

  3. UVHD to edytor szesnastkowy, który wydaje się mieć funkcje, o które prosisz. Jedynym problemem jest to, że działa tylko w systemie Windows / SFU (Services for Unix), a nie w DOS. Co to właściwie oznacza dla użytkownika końcowego, którego tak naprawdę nie wiem, ale mam niejasne podejrzenie, że SFU zostało upuszczone w Vista i Win 7.

Mokubai
źródło
1
Ah, dobrze. Dzięki, truncrobi to, czego potrzebuję. Aha, i uwaga: SFU (a raczej SUA - „Podsystem dla aplikacji uniksowych”, znany również jako Interix) nie został porzucony w Windows 7; to niestety teraz element opcjonalny w wersji Ultimate. : \
user541686,
Ach, w porządku, nie mogłem znaleźć wiele na temat informacji na temat SUA / SFU, choć szczerze mówiąc, nie przyjrzałem się zbyt uważnie. Znalazłem również inny sposób tworzenia plików o dowolnej długości przy użyciu fsutili edytowałem moją odpowiedź, ale jak zauważyłem, nie widzę prawidłowego sposobu obcinania plików.
Mokubai
Nawiasem mówiąc, pomyślałem, że coś zwrócę: uważam, że poprawna długość danych to wirtualna długość pliku na dysku, a nie długość fizyczna . Na przykład, jeśli plik jest skompresowany, może być rzeczywiście mniejszy - potrzebny byłby skompresowany rozmiar pliku.
user541686,
5
copy /Y nul: file.txt

Oczywiście do ustawienia tylko 0 bajtów.

KipB7
źródło
2
To naprawdę nie odpowiada na pytanie.
Manishearth,
+1 Zgadzam się, że to nie jest właściwa odpowiedź, ale właśnie tego szukałem tutaj - jak obciąć plik z wiersza poleceń systemu Windows.
Dan Atkinson
2

Jeśli masz zainstalowany GnuWin32, możesz ddto zrobić.

dd if=nul of=/the/file/to/truncate bs=1 count=0 seek=the_file_size oflag=append
mogę zrobić
źródło
potencjał dd nigdy nie przestaje mnie zadziwiać, polecenie działa, ale bez if = nul.
zbyt