Thay đổi kích thước một tập tin trong dấu nhắc lệnh?


14

Làm cách nào để thay đổi kích thước tệp từ dấu nhắc lệnh (hoặc trong tệp bó)?

  • Nó cần phải coi tập tin là nhị phân . Các định dạng tập tin là không liên quan và tùy ý.

  • Mở rộng tập tin nên đệm nó với số không.

  • Thu nhỏ tệp nên cắt bớt tệp.

Nói cách khác:

Làm thế nào để bạn nhân đôi chức năng của SetEndOfFiletrong dấu nhắc lệnh?


Bạn có thể thử diskpart .
jpaugh

Câu trả lời:


10

Tôi không tin chức năng tồn tại tự nhiên trong shell DOS, tôi nghi ngờ bạn cần sử dụng một chương trình khác để hoàn thành công việc. Dưới đây là một vài khả năng:

  1. Có một công cụ tên là Trunc tuyên bố sẽ thực hiện chính xác những gì bạn đang theo đuổi:

    Trunc là một ứng dụng dòng lệnh của Windows để cắt các tệp theo kích thước đã chỉ định. Cũng có thể sử dụng để phóng to một tập tin.

    Bạn sẽ phải dùng thử để tìm hiểu chính xác làm thế nào tập tin được đệm ra (ví dụ như số không hoặc rác) nhưng nếu không thì điều này có vẻ phù hợp với hóa đơn của những gì bạn đang yêu cầu.

  2. fsutil là một Windows XP và công cụ hệ thống trở lên có một số chức năng có thể giúp ích. Cụ thể, fsutil filetiểu ban dường như có thể tạo, thiết lập độ dài và cũng không điền vào các tệp.

    Đặc biệt:

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

    Sẽ tạo một tệp 1024 byte đầy, nhưng tôi không thể thấy cách nào để cắt bớt tệp. Có một lệnh đặt độ dài dữ liệu hợp lệ, nhưng nó không xuất hiện để sửa đổi dấu EOF là:

    Sử dụng setvaliddata

    Trong NTFS, có hai khái niệm quan trọng về độ dài tệp: điểm đánh dấu Kết thúc tệp (EOF) và Độ dài dữ liệu hợp lệ (VDL). EOF chỉ ra độ dài thực tế của tệp. VDL xác định độ dài của dữ liệu hợp lệ trên đĩa. Mọi lần đọc giữa VDL và EOF sẽ tự động trả về 0 để duy trì yêu cầu tái sử dụng đối tượng C2.

  3. UVHD là một trình soạn thảo hex dường như có các chức năng mà bạn đang yêu cầu. Vấn đề duy nhất là nó chỉ hoạt động trong Windows / SFU (Dịch vụ cho Unix) chứ không phải DOS. Điều đó thực sự có ý nghĩa gì với người dùng cuối mà tôi không thực sự biết, nhưng tôi có một sự nghi ngờ mơ hồ rằng SFU đã bị loại bỏ trong Vista và Win 7.


1
À được rồi. Cảm ơn, trunclàm những gì tôi cần. Ồ, và một lưu ý: SFU (hay đúng hơn là SUA - "Hệ thống con cho các ứng dụng dựa trên Unix", còn gọi là Interix) đã không bị bỏ trong Windows 7; bây giờ nó chỉ là một thành phần tùy chọn trong phiên bản Ultimate. : \
user541686

À, đủ công bằng, tôi không thể tìm thấy nhiều thông tin về SUA / SFU mặc dù thành thật mà nói tôi không nhìn quá kỹ. Tôi cũng đã tìm thấy một cách khác để tạo các tệp có độ dài tùy ý bằng cách sử dụng fsutilvà chỉnh sửa câu trả lời của mình, nhưng như tôi đã lưu ý, tôi không thể thấy một cách hợp lệ để cắt các tệp.
Mokubai

Nhân tiện, tôi nghĩ tôi đã chỉ ra điều gì đó: Tôi tin rằng độ dài dữ liệu hợp lệ là độ dài ảo của tệp trên đĩa chứ không phải chiều dài vật lý . Ví dụ, nếu tệp được nén, nó thực sự có thể nhỏ hơn - bạn cần kích thước nén của tệp.
dùng541686

5
copy /Y nul: file.txt

Tất nhiên, chỉ cài đặt thành 0 byte.


2
Điều này thực sự dường như không trả lời câu hỏi.
Manishearth

+1 Tôi đồng ý rằng đó không phải là câu trả lời đúng nhưng đó chính xác là những gì tôi đến đây đang tìm kiếm - cách cắt một tệp từ dòng lệnh Windows.
Dan Atkinson

2

Nếu bạn đã cài đặt GnuWin32, thì bạn có thể sử dụng ddđể làm điều đó.

dd if=nul of=/the/file/to/truncate bs=1 count=0 seek=the_file_size oflag=append

tiềm năng dd không bao giờ hết làm tôi ngạc nhiên, lệnh hoạt động nhưng không có if = nul.
quá

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.