中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理按运行次数替换文档内容
作者:
标题: 批处理按运行次数替换文档内容 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  批处理按运行次数替换文档内容

问题
有两个文档a和b
a.txt内容如下
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
等等.............
b.txt里的内容乱七八糟,但没有特殊字符
要求:建立一批处理zzz.bat
第一次运行zzz.bat将b.txt中的myip换成a.txt中的第一行的内容,然后退出.
第二次运行zzz.bat将b.txt中的192.168.1.1换成a.txt中的第二行内容,然后退出
第三次运行zzz.bat将b.txt中的192.168.1.2又换成a.txt中的第三行内容,退出
依次类推............

[ Last edited by 26933062 on 2007-1-9 at 10:17 PM ]

2007-1-10 08:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  居然又是在同一帖子里问两个不相干的内容,最后一次提醒你:不相干的问题不要放在同一个帖子中,最好一帖一问。否则,嘿嘿……

  1、start "" "路径"
  2、按照你所描述的规律,没法类推,请检查你的描述是否正确。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-10 09:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 3 楼』:  

不好意识,看来我还是不太懂这里的规矩,一定改正.

我觉得已经描述的很清楚了,难道这不是规律?
就是每次将上一次改的内容再改为这一次提取的a.txt的内容.

[ Last edited by 26933062 on 2007-1-9 at 08:52 PM ]

2007-1-10 09:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  那第四次运行的时候,是把192.168.1.3替换掉呢,还是把192.168.1.2.3替换掉?第五次呢?……



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-10 10:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

版主可能没看清我的问题,我在运行了第三次以后b.txt中就已经没有192.168.1.2了,因为192.168.1.2已经被替换成192.168.1.3了,那么第四次运行当然是把192.168.1.3替换为192.168.1.4

2007-1-10 10:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  哦,看来确实是我理解错了一些地方,但是我觉得你描述的规律似乎是不能“依次类推”的,因为你第二次运行的时候,要替换的是 192.168.1 而非 192.168.1.1



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-10 11:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 7 楼』:  

哦  是我笔误,以改正

2007-1-10 11:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xyzup
初级用户





积分 39
发帖 16
注册 2006-12-6
状态 离线
『第 8 楼』:  

依我看来应该需要设一个变量,然后每次运行后'自加'并保存在一个特定的地方...
这个变量代表行数.也就是运行的次数!~~
大约这样吧!@!
具体就不会了,...其他兄弟看看怎样写吧



原谅我的无知
2007-1-10 12:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 9 楼』:  

写起来有点麻烦

2007-1-11 01:16
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
corz
新手上路





积分 6
发帖 3
注册 2007-12-7
状态 离线
『第 10 楼』:  

可以这么考虑,对两个文件进行比较,当第一行相同时,继续比较第二行,如果还相同就一直往下比较,不同的话,就将a文件的该行替换进b文件,执行一次退出。
下次再运行就会自动替换下一行了。

2007-12-16 09:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ybxcyx
初级用户





积分 26
发帖 11
注册 2007-12-18
状态 离线
『第 11 楼』:  

统计运行次数,就是相应行数已经解决,但如何在楼主说的b.txt中查找IP,并替换还在思考之中.文件中任意位置的ip地址,不依赖文本中的ip怎样查找并提取,替换呢?

2007-12-30 22:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ybxcyx
初级用户





积分 26
发帖 11
注册 2007-12-18
状态 离线
『第 12 楼』:  可以统计bat文件运行次数

@ECHO OFF
if not exist 1.txt  @ECHO On 0>1.txt
@ECHO OFF
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt ) do (
    set /a num+=1
    if !num! equ 1 set var=%%i
)
set /a var=!var!+1
echo !var! >1.txt
echo 程序第!var!次运行!
pause

我是初学者,在这里学习有了一些收获.希望大家多帮助,多鼓励.
只要把上面代码加到程序前面,就可以统计运行次数,很有趣.

2007-12-31 22:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ybxcyx
初级用户





积分 26
发帖 11
注册 2007-12-18
状态 离线
『第 13 楼』:  

文件ReadLine2.Bat(这个是别人编的)
@echo off&SetLocal ENABLEDELAYEDEXPANSION
:::::::::::ReadLine2.Bat::::::::::::::::::

if "%1"=="" (goto --help) else (set file=%1)
if not exist %file% goto :eof
if "%2"=="" (
        for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%file%"') do echo/%%b
        goto :eof
) else (
        set args=%*
        for %%a in (!args!) do (
                if not "%%a"=="%1" (for /f "tokens=1* delims=:" %%b in ('findstr /n .* "%file%"') do (
                        if "%%b"=="%%a" echo/%%c&&echo/%%c>b.txt)
               )
        )
)
goto :eof

::%%c就是要读行的内容。怎样去查询与替换b.txt的myip!

按运行次数读取a.txt中相应行数.bat
echo on
if not exist 1.txt  @ECHO On 0>1.txt
@ECHO OFF
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt ) do (
    set /a num+=1
    if !num! equ 1 set var=%%i
)
set /a var=!var!+1
echo !var! >1.txt

Call ReadLine2 a.txt !var!
pause

2007-12-31 23:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: