找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29778|回复: 13

[文本处理] 如何用批处理将文件修改到指定大小?

[复制链接]
发表于 2011-6-16 14:50:57 | 显示全部楼层 |阅读模式
有一批单个文件小于指定大小(如:64K)的文件,如何用批处理的方式将文件补零(在16进制下的00)到整64K大小?请各位大侠指教!
发表于 2011-6-16 16:12:39 | 显示全部楼层
  1. for %%a in (a.txt) do set /a b=64*1024-%%~za
  2. fsutil file createnew tmp %b%
  3. copy /b a.txt+b.txt a.txt
  4. del tmp
复制代码
 楼主| 发表于 2011-6-17 08:59:35 | 显示全部楼层
不好意思!我用你的代码试了一下,可是不行啊。是我哪里搞错了吗?
 楼主| 发表于 2011-6-17 09:01:49 | 显示全部楼层
我是这样试的:新建一个a.txt,随便往里写点内容,然后运行你的批处理,可是a.txt没有任何变化。
另外,我的文件不一定是txt文件。请高手们鼎力相助,谢谢。
发表于 2011-6-17 13:38:52 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. cmd /u/c echo;>2.$
  3. findstr/vrc:$ 2.$>1.$
  4. set n=1
  5. for /l %%a in (1 1 16) do (
  6.         set /a "n+=(m=n)"
  7.         set list=!n! !list!
  8.         copy>nul /b !m!.$+!m!.$ !n!.$
  9. )
  10. for %%a in (test.txt) do (
  11.         set /a z=0x10000-%%~za
  12.         for %%b in (!list!1) do (
  13.                 if !z! gtr %%b (
  14.                         set /a "z-=%%b"
  15.                         copy /b test.txt+%%b.$ test.txt
  16.                 )
  17.         )
  18. )
  19. copy /b test.txt+1.$ test.txt
  20. del /f /q *.$
  21. pause
复制代码
发表于 2011-6-17 13:54:53 | 显示全部楼层
16禁止的00不就是ascii的null字符码……
发表于 2011-6-17 14:05:01 | 显示全部楼层
6# applba

我百度了半天,仍然不懂用debug...
发表于 2011-6-17 18:01:36 | 显示全部楼层
二楼的代码问题在这
copy /b a.txt+b.txt a.txt
改成下面这样就应该没问题了
copy /b a.txt+tmp a.txt

debug的方案

  1. @goto :start
  2. r bx
  3. 1
  4. r cx
  5. 0
  6. w
  7. q

  8. :start
  9. @echo off
  10. chcp 437 & graftabl 936 & cls
  11. pushd %~sdp1
  12. ren %~snx1 %~sn1.tmp
  13. debug %~sn1.tmp < %0 >nul
  14. ren %~sn1.tmp "%~nx1"
  15. popd
复制代码
发表于 2011-6-17 18:10:32 | 显示全部楼层
8# qzwqzw


也许是系统环境不同吧,在我这里copy /b a.txt+b.txt a.txt是先用a.txt覆盖a.txt再用b.txt附加到a.txt后,所以copy /b a.txt+b.txt a.txt没有问题,copy /b a.txt+b.txt b.txt则不行
发表于 2011-6-18 09:35:08 | 显示全部楼层
从没有深究过copy /b a.txt+b.txt b.txt
现在想来可能是语义上存在二义性的问题
当第一步copy将a.txt拷贝入b.txt中后
再读b.txt是读拷贝之前的版本还是拷贝之后的版本呢?
这在命令实现上是有困难的
发表于 2011-6-18 13:25:28 | 显示全部楼层
10# qzwqzw


copy /b a+b a不等于copy /b a+b b,前者可以成功合并,后者只等于copy a b

这里的copy输出到文件的方式和sort的/o开关类似,应该是执行一步输出一步的,不会像句柄重定向那样在预处理时就清空了目标文件
而且从现象来猜测,copy文件时是修改了硬盘数据与文件的关联呢?还是把当前处理的文件整个复制到内存(大文件怎么办)?或者是能够自主判断输入输出设备是否相等?
发表于 2011-6-18 15:20:42 | 显示全部楼层
DEBUG  比较靠谱。批处理,或者是记事本,好像还不能处理16进制!个人理解是这样~
发表于 2011-6-18 17:25:02 | 显示全部楼层
copy 是读取源文件内容到内存然后再写入目标的
不会存在修改文件与硬盘数据关联的情况

copy a+b+c的形式缺省是以a为目标的
与copy a+b+c a 实质等同
其机制大致如下:
读方式打开a
读a到内存
发现目标是a
关闭a
读写方式打开a
读a到内存
读方式打开b
读b到内存
写内存到a
关闭b
读方式打开c
读c到内存
写内存到a
关闭c
关闭a

copy a+b+c c 的机制大致如下:
读方式打开a
读a到内存
发现目标是c
读写方式打开c
写内存到c
关闭a
读方式打开b
读b到内存
写内存到c
关闭b
关闭c
发表于 2011-6-18 17:28:44 | 显示全部楼层
复杂,我晕了的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 18:51 , Processed in 0.021133 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表