中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-04 12:07
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 变量替换文本
可打印版本  904 / 4
第1楼 lishuanggen 发表于 2007-05-07 00:18
新手上路 发帖 3 积分 8
变量替换文本
我没写过bat文件,我在做ETL 数据抽取的时候需要一个调用一个替换文本的bat文件, 
比如我有一个 test.txt 文本, 里面有一个 **** test1 **** 字符串.
谁能给我一个整的代码, 有两个变量, 一个变量是 文本里的字符变量(test1) 另一个是要替换成的变量 (mynewtest)
我在我的ETL脚本中调用这个bat文件:
exec('....\test.bat','test1','mynewtest');
意思就是,在执行test.bat文件时,将test.txt 文本中的 test1 替换成 mynewtest ,'test1','mynewtest' 都是外部传递的字符
谢谢大家了。
第2楼 lxmxn 发表于 2007-05-07 02:16
版主 发帖 4,938 积分 11,386
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楼 lishuanggen 发表于 2007-05-07 12:42
新手上路 发帖 3 积分 8
谢谢你,版主
你给我的代码怎么使用,直接双击.bat文件还是到 dos下调用,
我这样写,ChangeStr "[要替换的文件]" "[被替换的字符]" "[替换字符]"
它总会弹出提示,
我想问下版主,
比如说,我用你的代码建了一个.bat文件,
然后在dos下调用,
:E:\Documents and Settings\Administrator\ChangeStr.bat "E:\1.txt" "abcd" "m"
不要任何提示,可以教下我怎么改吗?
第4楼 lxmxn 发表于 2007-05-07 15:41
版主 发帖 4,938 积分 11,386
To lishuanggen:

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

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

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

或者
第5楼 lishuanggen 发表于 2007-05-07 17:37
新手上路 发帖 3 积分 8
谢谢,我试了下,这样可以,但是生成了一个新文件 1.txt~ ,而原来的1.txt文本里的 abc 还是没有变成123,1.txt~文件里的变了,能不能在原有的文本中直接替换,而不生成一个新文件?
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023