中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 根据模板文件创建文件 上一主题 | 下一主题
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『楼 主』:  根据模板文件创建文件

我要根据一个文本文件发邮件,模板文件当中包含了大量的变量,我的代码如下,但是缺点是把空行过滤掉了,如何保留原来的空行呢?

模板.txt
~~~~~~~~~~~~~~~~~~
Dear !USERNAME!,

You system name is: !computername!

!time! !date!

~~~~~~~~~~~~~~~~~~
代码:
setlocal enabledelayedexpansion
echo. >mail.txt
for /f "tokens=*" %%i in (content.txt) do (echo %%i<nul>>mail.txt)

[ Last edited by uiopuiop on 2009-4-25 at 11:16 ]

2009-4-25 10:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『第 2 楼』:  

自己想了个笨办法,在ECHO 后面加个点,然后需要在模板文件里的空行里多加个空格。
不知道有啥更好的办法不在模板的空行里加空格。

echo. xxxx

[ Last edited by uiopuiop on 2009-4-25 at 11:37 ]

2009-4-25 10:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『第 3 楼』:  

居然试了几种方法都无效, 奇怪啊????

setlocal enabledelayedexpansion
echo. >mail.txt
for /f "tokens=*" %%i in (template.txt) do ( if "%%i"=="" (echo.>>mail.txt &echo.>>mail.txt) else (echo. %%i<nul>>mail.txt))

for /f "tokens=*" %%i in (template.txt) do (set line=%%i& if not defined line (echo.>>mail.txt &echo.>>mail.txt) else (echo. %%i<nul>>mail.txt))

[ Last edited by uiopuiop on 2009-4-25 at 11:46 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 doscndu 分数: +1  时间:2020-9-23 21:50


2009-4-25 11:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 4 楼』:  

@echo off
(for /f "tokens=1* delims=:" %%i in ('findstr /n .* template.txt') do (echo.%%j))>mail.txt

   此帖被 +2 点积分      点击查看详情   
评分人:【 uiopuiop 分数: +2  时间:2009-4-25 13:16




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-25 12:19
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『第 5 楼』:  RE: 4 楼

4 楼厉害啊,佩服!

问一下,为什么 delims=: 中我用其他符号代替“:”冒号就不灵了?

还有就是 eol=# 在FOR 中不起作用了,如果我想用 “#” 注释掉模板中的某一行字。

2009-4-25 13:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 6 楼』:  

findstr /n .* 会在每行前面加上n:行号,利用delims=:来过滤掉这个行号,所以参数是%%i和%%j



2009-4-25 13:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 7 楼』:  


@echo off&setlocal enabledelayedexpansion
(for /f "tokens=1* delims=:" %%i in ('findstr /n .* template.txt') do (
set str=%%j
if "!str:~0,1!" neq "#" echo.%%j))>mail.txt
findstr /n .* template.txt 是在每一行前面加行号,如:
1:aaa
2:bbb
3:
4:kkk
用:号作分隔符,取后面所有的,就可以防丢失空行了



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-25 13:45
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『第 8 楼』:  

妙哉 !!!

2009-4-26 00:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: