Windows“复制”使用占位符向输出文件添加 1 个字节

发布于 2024-11-30 16:53:46 字数 238 浏览 0 评论 0原文

试试这个:

echo Test > a1.txt
copy a1.txt b.txt
copy a?.txt c.txt

文件 c.txt 将比 b.txt 大 1 个字节。这是为什么?

解决方法:

for %i in (a?.txt) do copy %i d.txt

d.txt 将具有正确的大小。

Try this:

echo Test > a1.txt
copy a1.txt b.txt
copy a?.txt c.txt

File c.txt will be 1 byte larger that b.txt. Why is that?

Workaround:

for %i in (a?.txt) do copy %i d.txt

d.txt will have the correct size.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

祁梦 2024-12-07 16:53:46

由于通配符 ?(即使只有一个匹配文件)和一个目标文件,您提供了多个源文件,这允许 copy 附加源文件。在此模式下,copy 将源文件和目标文件视为 ASCII 文本文件(就好像您已给出 /A 开关一样),因此它会附加结尾 -文件 (EOF) 字符(代码 26 十进制 = 0x1A 十六进制)并在(第一个)EOF 字符处截断每个源文件。添加 /B 开关可以防止:

copy /B a?.txt c.txt

考虑到开关 /A/B 的位置很重要,因此您可以:

  • 在第一个文件规范之前提供开关时,定义如何全局处理文件的方式:

    rem // 将所有文件视为二进制文件:
    复制 /B a.txt + b.txt c.txt
    
  • 单独更改方式:

    rem /* 将 `a.txt` 视为 ASCII 文本文件(多个源的默认值),
    rem 然后将`b.txt`和`c.txt`视为二进制文件:*/
    复制a.txt + b.txt /B c.txt
    

You have provided multiple source files due to wild-card ? (even if there is only one matching file) and a singe destination file, which lets copy append the source files. In this mode, copy treats the source and destination files as ASCII text files (as if you would have given the /A switch), so it appends the end-of-file (EOF) character (code 26 dec. = 0x1A hex.) and truncates every source file at the (first) EOF character. Adding the /B switch prevents that:

copy /B a?.txt c.txt

Regard that the position of the switches /A and /B matters, so you can:

  • define the way how to treat the files globally, when providing the switches before the first file specification:

    rem // Treat all files as binary ones:
    copy /B a.txt + b.txt c.txt
    
  • alter the way individually:

    rem /* Treat `a.txt` as ASCII text file (default for multiple sources),
    rem    then treat `b.txt` and `c.txt` as binary files: */
    copy a.txt + b.txt /B c.txt
    
如歌彻婉言 2024-12-07 16:53:46

copy /B a?.txt c.txt 似乎有效。 B 代表二进制,因此不添加文件结束符。

copy /B a?.txt c.txt seems to work. B is for binary, so no end of file character is added.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文