中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 变量替换文本 上一主题 | 下一主题
lishuanggen
新手上路





积分 8
发帖 3
注册 2007-5-6
状态 离线
『楼 主』:  变量替换文本

我没写过bat文件,我在做ETL 数据抽取的时候需要一个调用一个替换文本的bat文件, 
比如我有一个  test.txt 文本, 里面有一个 ****  test1 **** 字符串.
谁能给我一个整的代码, 有两个变量, 一个变量是 文本里的字符变量(test1) 另一个是要替换成的变量 (mynewtest)
我在我的ETL脚本中调用这个bat文件:
exec('....\test.bat','test1','mynewtest');
意思就是,在执行test.bat文件时,将test.txt 文本中的 test1 替换成 mynewtest ,'test1','mynewtest' 都是外部传递的字符
谢谢大家了。

2007-5-7 00:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

To lishuanggen:

在支持命令行运行的程序中加上 “ChangeStr "[要替换的文件]" "[被替换的字符]" "[替换字符]"” 即可。

  Quote:
:: ChangeStr.bat
:: Code by lxmxn @ bbs.cn-dos.net
:: Date 2:10 2007-5-7

@echo off&SetLocal EnableDelayedExpansion
if "%3"=="" goto :err
set file=%~1
set str1=%~2
set str2=%~3
set newfile=%file%~
rem echo %file% %str1% %str2%
copy nul %newfile% >nul
for /f "tokens=1* delims=: eol=" %%a in ('findstr/n .* "%file%"') do (
        if not [%%b]==[] (set string=%%b
        set string=!string:%str1%=%str2%!
        >>%newfile% echo\!string!) else (>>%newfile% echo\)
)
set/p ok=是否打开 %newfile% ? [Y]/[N]
if /i "%ok%"=="y" (start notepad %newfile%) else (goto :eof)
EndLocal
goto :eof
:err
echo\调用错误
echo\用法:   ChangeStr "[要替换的文件]" "[被替换的字符]" "[替换字符]"



2007-5-7 02:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lishuanggen
新手上路





积分 8
发帖 3
注册 2007-5-6
状态 离线
『第 3 楼』:  

谢谢你,版主
你给我的代码怎么使用,直接双击.bat文件还是到 dos下调用,
我这样写,ChangeStr "[要替换的文件]" "[被替换的字符]" "[替换字符]"
它总会弹出提示,
我想问下版主,
比如说,我用你的代码建了一个.bat文件,
然后在dos下调用,
:E:\Documents and Settings\Administrator\ChangeStr.bat "E:\1.txt" "abcd" "m"
不要任何提示,可以教下我怎么改吗?

2007-5-7 12:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

To lishuanggen:

首先,你要把我上面的代码保存为ChangeStr.bat或者ChangeStr.cmd文件,然后用别的脚本或者程序来调用它。

这个是被别的程序调用的一个小程序,必须带3个参数才可以正常的运行。

比如你要替换“1.txt”文件里的“abc”为“123”,可以在批处理里面这样写:
ChangeStr.bat "1.txt" "abc" "123"
或者
Call ChangeStr.bat "1.txt" "abc" "123"


2007-5-7 15:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lishuanggen
新手上路





积分 8
发帖 3
注册 2007-5-6
状态 离线
『第 5 楼』:  

谢谢,我试了下,这样可以,但是生成了一个新文件 1.txt~ ,而原来的1.txt文本里的 abc 还是没有变成123,1.txt~文件里的变了,能不能在原有的文本中直接替换,而不生成一个新文件?

2007-5-7 17:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: