中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 06:35
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 复制修改文件的批处理问题 查看 700 回复 8
楼 主 复制修改文件的批处理问题 发表于 2009-01-23 10:42 ·  中国 北京 电信
新手上路
积分 7
发帖 6
注册 2009-01-21 17:03
17年会员
UID 137195
性别 男
状态 离线
我是一个新手,想弄一个满足如下条件的批处理程序,请大家帮帮我。谢谢了!

我有一个名为457003.out文件(文本文件),需要将文本中的一个字符串“test1”替换为600001,同时将文件名修改为600001.out;并且,将该.out文件复制成100份,每一个的文件名为600001.out——600100.out,同时,.out文件中的test1,也是600001——600100.

请问,用批处理能够实现么?该怎样实现呢?

非常感激!
2 发表于 2009-01-23 11:01 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 20
发帖 13
注册 2009-01-05 14:58
17年会员
UID 135829
性别 男
状态 离线

@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 ]
3 发表于 2009-01-23 11:18 ·  中国 北京 电信
新手上路
积分 7
发帖 6
注册 2009-01-21 17:03
17年会员
UID 137195
性别 男
状态 离线
谢谢你的帮助,刚才试了试,效果不错。
非常感谢!
在测试的时候,提示有“此时不应有 <。”
是什么意思呢?
4 发表于 2009-01-23 11:23 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 20
发帖 13
注册 2009-01-05 14:58
17年会员
UID 135829
性别 男
状态 离线
那应该是你文本里面的内容有特殊的字符导致的
5 发表于 2009-01-23 11:53 ·  中国 北京 电信
新手上路
积分 7
发帖 6
注册 2009-01-21 17:03
17年会员
UID 137195
性别 男
状态 离线
刚才修改一下程序:
@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
....

请问这样修改呢?谢谢了!
6 发表于 2009-01-23 11:55 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 20
发帖 13
注册 2009-01-05 14:58
17年会员
UID 135829
性别 男
状态 离线
如果数值的前面的0开头的,系统会将其默认为八进制表示方式,所以就做八进制运算了,要注意这一点
7 发表于 2009-01-23 12:01 ·  中国 北京 电信
新手上路
积分 7
发帖 6
注册 2009-01-21 17:03
17年会员
UID 137195
性别 男
状态 离线
那能不能避免这样呢?保持前面的0.
8 发表于 2009-01-23 12:19 ·  中国 北京 电信
新手上路
积分 7
发帖 6
注册 2009-01-21 17:03
17年会员
UID 137195
性别 男
状态 离线
我调整了一下程序:
@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!

这样就可以实现我的目标了

谢谢了
9 发表于 2009-01-23 12:19 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 20
发帖 13
注册 2009-01-05 14:58
17年会员
UID 135829
性别 男
状态 离线
>>00!n!.out echo !a!
也许这样能解决你的问题
论坛跳转: