中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 复制修改文件的批处理问题 上一主题 | 下一主题
admking
新手上路





积分 7
发帖 6
注册 2009-1-21
状态 离线
『楼 主』:  复制修改文件的批处理问题

我是一个新手,想弄一个满足如下条件的批处理程序,请大家帮帮我。谢谢了! 我有一个名为457003.out文件(文本文件),需要将文本中的一个字符串“test1”替换为600001,同时将文件名修改为600001.out;并且,将该.out文件复制成100份,每一个的文件名为600001.out——600100.out,同时,.out文件中的test1,也是600001——600100. 请问,用批处理能够实现么?该怎样实现呢? 非常感激!


2009-1-23 10:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
BaseCoder
初级用户





积分 20
发帖 13
注册 2009-1-5
状态 离线
『第 2 楼』:  

@echo off&setlocal enabledelayedexpansion
set n=600001
:loop
for /f "delims=" %%i in (457003.out) do (
set a=%%i
call set a=%%a:test1=!n!%%
>>!n!.out echo !a!
)
set /a n+=1
if !n! lss 600101 call:loop !n!
[ Last edited by BaseCoder on 2009-1-23 at 11:12 ]


2009-1-23 11:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
admking
新手上路





积分 7
发帖 6
注册 2009-1-21
状态 离线
『第 3 楼』:  

谢谢你的帮助,刚才试了试,效果不错。 非常感谢! 在测试的时候,提示有“此时不应有 <。” 是什么意思呢?


2009-1-23 11:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
BaseCoder
初级用户





积分 20
发帖 13
注册 2009-1-5
状态 离线
『第 4 楼』:  

那应该是你文本里面的内容有特殊的字符导致的


2009-1-23 11:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
admking
新手上路





积分 7
发帖 6
注册 2009-1-21
状态 离线
『第 5 楼』:  

刚才修改一下程序: @echo off&setlocal enabledelayedexpansion set n=00620001 :loop for /f "delims=" %%i in (00490146.out) do ( set a=%%i call set a=%%a:test1=!n!%% >>!n!.out echo !a! ) set /a n+=1 if !n! lss 00620101 call:loop !n! 按照这样测试,发现新生成的文件名,除了第一个是按照00620001进行的,其他的都是如下:204803.out 204804.out 204805.out 204806.out 204807.out 204808.out 204809.out 204810.out 204811.out 204812.out .... 请问这样修改呢?谢谢了!


2009-1-23 11:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
BaseCoder
初级用户





积分 20
发帖 13
注册 2009-1-5
状态 离线
『第 6 楼』:  

如果数值的前面的0开头的,系统会将其默认为八进制表示方式,所以就做八进制运算了,要注意这一点


2009-1-23 11:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
admking
新手上路





积分 7
发帖 6
注册 2009-1-21
状态 离线
『第 7 楼』:  

那能不能避免这样呢?保持前面的0.


2009-1-23 12:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
admking
新手上路





积分 7
发帖 6
注册 2009-1-21
状态 离线
『第 8 楼』:  

我调整了一下程序: @echo off&setlocal enabledelayedexpansion set n=620001 :loop for /f "delims=" %%i in (00490146.out) do ( set a=%%i call set a=%%a:test1=00!n!%% >>00!n!.out echo !a! ) set /a n+=1 if !n! lss 620101 call:loop !n! 这样就可以实现我的目标了 谢谢了


2009-1-23 12:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
BaseCoder
初级用户





积分 20
发帖 13
注册 2009-1-5
状态 离线
『第 9 楼』:  

>>00!n!.out echo !a! 也许这样能解决你的问题


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

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


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



论坛跳转: