Board logo

标题: 根据模板文件创建文件 [打印本页]

作者: uiopuiop     时间: 2009-4-25 10:41    标题: 根据模板文件创建文件

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

模板.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 ]
作者: uiopuiop     时间: 2009-4-25 10:51
自己想了个笨办法,在ECHO 后面加个点,然后需要在模板文件里的空行里多加个空格。
不知道有啥更好的办法不在模板的空行里加空格。

echo. xxxx

[ Last edited by uiopuiop on 2009-4-25 at 11:37 ]
作者: uiopuiop     时间: 2009-4-25 11:21
居然试了几种方法都无效, 奇怪啊????

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 ]
作者: netbenton     时间: 2009-4-25 12:19
@echo off
(for /f "tokens=1* delims=:" %%i in ('findstr /n .* template.txt') do (echo.%%j))>mail.txt
作者: uiopuiop     时间: 2009-4-25 13:19    标题: RE: 4 楼

4 楼厉害啊,佩服!

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

还有就是 eol=# 在FOR 中不起作用了,如果我想用 “#” 注释掉模板中的某一行字。
作者: zh159     时间: 2009-4-25 13:40
findstr /n .* 会在每行前面加上n:行号,利用delims=:来过滤掉这个行号,所以参数是%%i和%%j
作者: netbenton     时间: 2009-4-25 13:45

@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
用:号作分隔符,取后面所有的,就可以防丢失空行了
作者: uiopuiop     时间: 2009-4-26 00:39
妙哉 !!!