在命令提示符下调整文件大小?


14

如何从命令提示符(或批处理文件)中调整文件大小?

  • 它需要将文件视为二进制文件文件格式无关紧要。

  • 扩展文件应使用零填充。

  • 缩小文件应截断文件。

换一种说法:

您如何SetEndOfFile在命令提示符下复制的功能?


您可以尝试diskpart
jpaugh

Answers:


10

我不认为该功能本身就存在于DOS外壳中,我怀疑您需要使用其他程序来完成这项工作。这里有几种可能性:

  1. 有一个称为Trunc的工具声称可以完全满足您的要求:

    Trunc是Windows命令行应用程序,用于将文件截断为指定大小。也可用于放大文件。

    您必须尝试一下,才能确切地了解如何填充文件(例如,用零或垃圾填充),但否则,这似乎符合您的要求。

  2. fsutil是Windows XP及更高版本的系统工具,似乎具有一些可能会有所帮助的功能。具体来说,该fsutil file子命令似乎能够创建,设置长度以及零填充文件。

    特别:

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

    将创建一个零填充的1024字节文件,但是我看不到截断文件的方法。有一个命令可以设置有效的数据长度,但是它似乎不能将EOF标记修改为:

    使用setvaliddata

    在NTFS中,文件长度有两个重要概念:“文件结尾”(EOF)标记和“有效数据长度”(VDL)。EOF指示文件的实际长度。VDL标识磁盘上有效数据的长度。VDL和EOF之间的任何读取都会自动返回0,以保留C2对象重用要求。

  3. UVHD是一个十六进制编辑器,似乎具有您所需要的功能。唯一的问题是它只能在Windows / SFU(Unix服务)下运行,而不能在DOS下运行。这实际上对最终用户意味着什么,我实际上并不知道,但是我模糊地怀疑SFU在Vista和Win 7中被删除了。


1
啊好吧。谢谢,trunc我需要什么。哦,还有一个注释:Windows 7中没有删除SFU(或者更确切地说,SUA –“基于Unix的应用程序的子系统”,又名Interix)。不幸的是,它只是Ultimate版本中的可选组件。:\
user541686 2011年

嗯,很公平,虽然我并没有仔细观察,但我找不到关于SUA / SFU的信息。我还找到了使用fsutil并编辑答案来创建任意长度文件的另一种方法,但是正如我指出的那样,我看不到截断文件的有效方法。
Mokubai

顺便说一句,我想指出一点:我相信有效数据长度是磁盘上文件的虚拟长度,而不是物理长度。例如,如果文件被压缩,则实际上可能会更小-您需要文件的压缩大小。
user541686 2011年

5
copy /Y nul: file.txt

当然,仅设置为0字节。


2
这似乎并没有回答这个问题。
Manishearth

+1我同意这不是正确的答案,但这正是我在这里寻找的内容-如何从Windows命令行截断文件。
丹·阿特金森

2

如果您安装了GnuWin32,则可以使用dd它来进行安装。

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

dd潜力永远不会令我惊叹,命令有效,但没有if = nul。
也是

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.