中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-16 10:31
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何在文件头插入字符串? 查看 2,984 回复 8
楼 主 如何在文件头插入字符串? 发表于 2004-11-30 00:00 ·  中国 江苏 苏州 电信
初级用户
积分 109
发帖 3
注册 2004-11-23 00:00
UID 33939
性别 男
状态 离线
请问如何在一个文件的头部插入一个字符串?要求插入的字符串不含回车换行.

我用echo发现它始终会加回车换行.比如echo "hello">file,file的大小为7个byte,在最后多了回车换行,请问如何解决这个问题?

2 发表于 2004-12-01 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
用Horst的QECHO第三方工具。------------------------------------------------------------------------
QECHO Quote echo Ver 1.3 (c) 2000 Horst Schaeffer
------------------------------------------------------------------------QECHO supports output that is not possible with the normal ECHO command: + Strings in 'single' or "double" quotes marks
+ ASCII byte values (decimal)
+ Control codes with caret, like ^L (=ASCII 12)
+ Symbols: CR (13), LF (10), FF (12), ESC (27)
+ @nn - write position (extra s.below)No terminating CR/LF is output unless specified (!) thus: QECHO "something" CR LF
is same as: ECHO somethingStrings may include the other type of quotes, like: 'file "%1" done'
or "file '%1' done". The same type of quotes must be doubled if used
within a string, for example: "file ""%1"" done".Pipes and redirections as usual. Separators (blank, comma, semicolon)
allowed. If any invalid data occur, the rest of the line will be ignored
(errorlevel > 0).Some examples:++ Write to a file without CR+LF QECHO "SET X="> some.bat++ Pipe multiple lines or CR's QECHO CR,"N",CR | format A: /q/u /v:"" (FORMAT, no prompts)
QECHO "D100,200",CR,"Q",CR | debug PROG.COM (DUMP thru DEBUG)++ Send control codes to printer (without CR/LF) QECHO FF > LPT1 (form feed)
QECHO ESC "@", ESC "l" 10 > LPT1 (reset, margin /EPSON)
Extra
-----
With the @-sign you can set the write position (1...) for the following
data. This allows column aligned output, even if the length of the first
part is variable.Example: Qecho "%varname%" @20 "more text", CR,LF >>file.extAnother feature: A string can be input to QECHO by redirection, an then
be completed by writing (or overwriting) something at the specified
position. Please test to find out if you can use it...----
QECHO is freeware by Horst Schaeffer - no warranties of any kind
eMail: horst.schaeffer@gmx.net= 04 AUG 2002
用Google搜索下载地址。请注意写好帖子标题。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
3 发表于 2004-12-01 00:00 ·  中国 江苏 苏州 电信
初级用户
积分 109
发帖 3
注册 2004-11-23 00:00
UID 33939
性别 男
状态 离线
多谢解答!请问可不可以只用dos原有的基本命令完成这个功能呢?
4 发表于 2004-12-04 00:00 ·  中国 山西 运城 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re sercomm:
不用第三方工具的方法也有很多,比如下面的debug方法:
@echo off
:makeasd 生成debug脚本
for %%f in (~insert.*) do del %%f
for %%s in (e100"insert text"1a n~insert.txt rcx 10 w q) do echo %%s>>~insert.asd
:runscr 运行debug脚本生成 prefix.txt
debug < ~insert.asd >nul
:fixed
copy ~insert.txt+%0 %0.txt > nul
for %%f in (~insert.*) do del %%f
:end
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
5 发表于 2004-12-04 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
Re willsort:对dubug我一直不太熟悉,请问上面程序中“e100"insert text"1a”中的1a表示什么意思?难道表示文件结尾?如果字符串很长(超过了16个字符),是不是要相应修改rcx后面的数字来确定写入文件的字符串的长度?
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
6 发表于 2004-12-06 00:00 ·  中国 山西 运城 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re Climbing:  debug是一个很好的工具,因为在微软所有的操作系统中都包含它,而且可以用它访问硬件端口、内存系统区,甚至可以动态汇编一个小程序。数学运算和字符串操作也都可以用的上它。 1a在这里是用作文本文件结束符,主要供copy /a识别,也可以供type识别。这里之所以如此做,是为预防前缀字符串的长度不固定或无法确定。如果字符串很长当然需修改相应的数字,一般采用100作为限制长度,超过这样长的字符串,已经不适合用debug的e命令写入了。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
7 发表于 2004-12-06 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
1a是不是就是在DOS命令行下用Ctrl+z输入的字符?谢谢,我现在也发觉debug真的很好用,看来有必要重新复习一下汇编语言的知识。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
8 发表于 2004-12-06 00:00 ·  中国 山西 运城 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re Climbing: 是的,不仅仅是1a,ascii码表01~1a的所有特殊字符都可以用Ctrl+A~Ctrl+Z输入。在type(type con)和copy(copy con file)的文本环境中是直接输入的,在edit和其他大部分dos编辑文本环境中,还需要先按一下Ctrl+P。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
9 发表于 2006-06-14 12:37 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
先提取第一行的内容,然后设置成变量
然后用echo 写入前缀%变量%
然后用for /f "tokens=* skip=1" %%a in (旧文件) do echo %%a >>新文件

cmd @ xp
论坛跳转: