标题: [文本处理] 如何用批处理将文件修改到指定大小? [打印本页]
作者: pjzhong 时间: 2011-6-16 14:50 标题: 如何用批处理将文件修改到指定大小?
有一批单个文件小于指定大小(如:64K)的文件,如何用批处理的方式将文件补零(在16进制下的00)到整64K大小?请各位大侠指教!
作者: CrLf 时间: 2011-6-16 16:12
- for %%a in (a.txt) do set /a b=64*1024-%%~za
- fsutil file createnew tmp %b%
- copy /b a.txt+b.txt a.txt
- del tmp
复制代码
作者: pjzhong 时间: 2011-6-17 08:59
不好意思!我用你的代码试了一下,可是不行啊。是我哪里搞错了吗?
作者: pjzhong 时间: 2011-6-17 09:01
我是这样试的:新建一个a.txt,随便往里写点内容,然后运行你的批处理,可是a.txt没有任何变化。
另外,我的文件不一定是txt文件。请高手们鼎力相助,谢谢。
作者: CrLf 时间: 2011-6-17 13:38
- @echo off&setlocal enabledelayedexpansion
- cmd /u/c echo;>2.$
- findstr/vrc:$ 2.$>1.$
- set n=1
- for /l %%a in (1 1 16) do (
- set /a "n+=(m=n)"
- set list=!n! !list!
- copy>nul /b !m!.$+!m!.$ !n!.$
- )
- for %%a in (test.txt) do (
- set /a z=0x10000-%%~za
- for %%b in (!list!1) do (
- if !z! gtr %%b (
- set /a "z-=%%b"
- copy /b test.txt+%%b.$ test.txt
- )
- )
- )
- copy /b test.txt+1.$ test.txt
- del /f /q *.$
- pause
复制代码
作者: applba 时间: 2011-6-17 13:54
16禁止的00不就是ascii的null字符码……
作者: CrLf 时间: 2011-6-17 14:05
6# applba
我百度了半天,仍然不懂用debug...
作者: qzwqzw 时间: 2011-6-17 18:01
二楼的代码问题在这
copy /b a.txt+b.txt a.txt
改成下面这样就应该没问题了
copy /b a.txt+tmp a.txt
debug的方案- @goto :start
- r bx
- 1
- r cx
- 0
- w
- q
-
- :start
- @echo off
- chcp 437 & graftabl 936 & cls
- pushd %~sdp1
- ren %~snx1 %~sn1.tmp
- debug %~sn1.tmp < %0 >nul
- ren %~sn1.tmp "%~nx1"
- popd
复制代码
作者: CrLf 时间: 2011-6-17 18:10
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则不行
作者: qzwqzw 时间: 2011-6-18 09:35
从没有深究过copy /b a.txt+b.txt b.txt
现在想来可能是语义上存在二义性的问题
当第一步copy将a.txt拷贝入b.txt中后
再读b.txt是读拷贝之前的版本还是拷贝之后的版本呢?
这在命令实现上是有困难的
作者: CrLf 时间: 2011-6-18 13:25
10# qzwqzw
copy /b a+b a不等于copy /b a+b b,前者可以成功合并,后者只等于copy a b
这里的copy输出到文件的方式和sort的/o开关类似,应该是执行一步输出一步的,不会像句柄重定向那样在预处理时就清空了目标文件
而且从现象来猜测,copy文件时是修改了硬盘数据与文件的关联呢?还是把当前处理的文件整个复制到内存(大文件怎么办)?或者是能够自主判断输入输出设备是否相等?
作者: cxmzlxb 时间: 2011-6-18 15:20
DEBUG 比较靠谱。批处理,或者是记事本,好像还不能处理16进制!个人理解是这样~
作者: qzwqzw 时间: 2011-6-18 17:25
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
作者: CrLf 时间: 2011-6-18 17:28
复杂,我晕了的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |