在 Microsoft Windows Server 2008 (R1) 32 位上,我有些难以理解用于以及之间的区别
copy /a
和copy /b
这Technet 文章copy
对我没什么帮助:
copy /a
→ … 复制使用文件结束符(即CTRL+ Z)来指示文件结束的 ASCII 文本文件。… 的效果/a
取决于其在命令行字符串中的位置。当/a
跟在 Source 后面时,copy
将文件视为 ASCII 文件并复制第一个文件结束字符之前的数据.
copy /b
指示命令解释器读取目录中文件大小指定的字节数。/b
是 copy 的默认值,除非 copy 合并文件。… 的效果/b
取决于它在命令行字符串中的位置。当/b
跟在 Source 后面时,copy
复制整个文件,包括任何文件结束字符。 → 来源
这让我很困惑,因为我认为这copy
只是将文件克隆到另一个目的地。
问题:一个实际的例子,其中copy /a
and⁄orcopy /b
会产生影响,这将极大地帮助我理解差异。
答案1
我会简单地避免 COPY/A
我希望它能将信息复制到第一个 EOF (Ctrl-Z) 字符,然后截断之后的文件。因此,如果您有一个文件,内容是“HELLO^M^ZGREETINGS”,则结果只会显示“HELLO^M”。
它还可以对 Unix 文本文件执行一些有趣的操作,例如将它们转换为 MS-DOS ASCII 格式。在 DOS 早期,人们更倾向于将文本文件转换为自己操作系统的原生格式,这种做法被认为是有益的。这可能被视为一项真正有助于增强兼容性的功能。
从理论上讲,这些可能是非常理想的。但在大多数情况下可能并非如此。在大多数情况下,您需要原始文件位的精确副本。因此需要复制/B。复制/B 通常也是默认设置。(它是文件的默认设置;如果您不指定文件作为源,它可能不是默认设置。)
例如,在至少某个版本的 DOS 中,我曾使用 Copy/B 如下:
复制/B config1.txt+config2.txt config3.txt
我认为,如果没有 /B,指定多个文件名可能会导致源被视为非二进制源。但是,我似乎记得后来发现,确切的行为可能会根据我使用的命令 shell 而有所不同。这可能意味着操作系统版本不同,或者可能使用像 JP Software 的 4DOS 这样的 shell,众所周知,我经常使用它。
顺便说一句,这与 FTP 以 ASCII 模式或二进制模式传输文件的能力类似。理论上可能有用,但实际上可能造成的混乱多于帮助。CMD 的 COPY/A 比 FTP 更是如此。
答案2
不。Copy 是一个 writer 可执行函数。我认为这是 MS-DOS 的遗传行为。例如,您可以编写自己的文件,而无需使用任何编辑器作为 EDIT。例如,要创建一个文件:
copy:con myfile.txt
Hello world!
This is other line
^Z
在上面的例子中,^Z 是“CONTROL+Z”的符号,表示:“文件结束”。
现在,对于您的问题,当您使用第一个语句时,您的意思是这样的。您处于“ASCII”复制附加模式。第二个版本是“二进制”版本,每个人都很了解。
如果我的回答似乎有点暗,请评论,我很乐意更新它:)