中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-04 11:11
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 变量替换文本 查看 903 回复 4
楼 主 变量替换文本 发表于 2007-05-07 00:18 ·  中国 上海 东方有线
新手上路
积分 8
发帖 3
注册 2007-05-06 23:42
19年会员
UID 87710
性别 男
状态 离线
我没写过bat文件,我在做ETL 数据抽取的时候需要一个调用一个替换文本的bat文件, 
比如我有一个 test.txt 文本, 里面有一个 **** test1 **** 字符串.
谁能给我一个整的代码, 有两个变量, 一个变量是 文本里的字符变量(test1) 另一个是要替换成的变量 (mynewtest)
我在我的ETL脚本中调用这个bat文件:
exec('....\test.bat','test1','mynewtest');
意思就是,在执行test.bat文件时,将test.txt 文本中的 test1 替换成 mynewtest ,'test1','mynewtest' 都是外部传递的字符
谢谢大家了。
2 发表于 2007-05-07 02:16 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
To lishuanggen:

在支持命令行运行的程序中加上 “ChangeStr "" "" ""” 即可。

:: 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 == (set string=%%b
set string=!string:%str1%=%str2%!
>>%newfile% echo\!string!) else (>>%newfile% echo\)
)
set/p ok=是否打开 %newfile% ? /
if /i "%ok%"=="y" (start notepad %newfile%) else (goto :eof)
EndLocal
goto :eof
:err
echo\调用错误
echo\用法: ChangeStr "" "" ""
3 发表于 2007-05-07 12:42 ·  中国 上海 东方有线
新手上路
积分 8
发帖 3
注册 2007-05-06 23:42
19年会员
UID 87710
性别 男
状态 离线
谢谢你,版主
你给我的代码怎么使用,直接双击.bat文件还是到 dos下调用,
我这样写,ChangeStr "[要替换的文件]" "[被替换的字符]" "[替换字符]"
它总会弹出提示,
我想问下版主,
比如说,我用你的代码建了一个.bat文件,
然后在dos下调用,
:E:\Documents and Settings\Administrator\ChangeStr.bat "E:\1.txt" "abcd" "m"
不要任何提示,可以教下我怎么改吗?
4 发表于 2007-05-07 15:41 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
To lishuanggen:

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

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

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

或者
Call ChangeStr.bat "1.txt" "abc" "123"
5 发表于 2007-05-07 17:37 ·  中国 上海 东方有线
新手上路
积分 8
发帖 3
注册 2007-05-06 23:42
19年会员
UID 87710
性别 男
状态 离线
谢谢,我试了下,这样可以,但是生成了一个新文件 1.txt~ ,而原来的1.txt文本里的 abc 还是没有变成123,1.txt~文件里的变了,能不能在原有的文本中直接替换,而不生成一个新文件?
论坛跳转: