中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 19:36
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已通过] 如何批量读取文本并替换内容
可打印版本  1,193 / 12
第1楼 top 发表于 2010-02-09 16:59
新手上路 发帖 10 积分 11
[已通过] 如何批量读取文本并替换内容
最近弄了个板块分类,A文件夹下有几十个下级文件夹,每个下级文件夹中都有很多文本(个数不定,文件名不同),

下级文件夹与文本都是中文名;某一下级文件夹中文本内容如下:

机电设备.TXT

000536 闽闽东
000617 石油济柴
000676 思达高科
000682 东方电子
000806 银河科技
002028 思源电气
002074 东源电器
002090 金智科技
002123 荣信股份
002169 智光电气
600192 长城电工
600268 国电南自
600343 航天动力
600382 广东明珠
600388 龙净环保

手动替换太麻烦,想用批处理解决,特来求助。

替换后内容如下:

机电设备.TXT

SZ000536
SZ000617
SZ000676
SZ000682
SZ000806
SZ002028
SZ002074
SZ002090
SZ002123
SZ002169
SH600192
SH600268
SH600343
SH600382
SH600388

把替换后的文本放入B文件夹下的对应文件夹中,

B文件夹下的下级文件夹同A文件夹(一一对应),用来存放替换后的文本。

谁会写批处理文件。

[ Last edited by top on 2010-2-11 at 12:27 ]
第2楼 top 发表于 2010-02-10 16:18
新手上路 发帖 10 积分 11
请高手帮忙写个批处理文件。
第3楼 tongzj 发表于 2010-02-10 18:09
初级用户 发帖 43 积分 49
测试是否可用。

@echo off
setlocal enabledelayedexpansion
:: 设定A、B目录路径,后面不要有\
set pathA=c:\a
set pathB=c:\b
:: 计算A目录长度用于截取后面的路径
for /l %%a in (1,1,200) do (if "!pathA:~%%a,1!"=="" (set A=%%a&goto start))

:start
:: 遍历A目录下子目录,如果B目录无此子目录则创建,替换所有txt文档
for /f "tokens=*" %%a in ('dir /b /s %pathA%\*.txt') do (
set dest=%%a
set dest=%pathB%!dest:~%A%!
for /f "tokens=*" %%b in ("!dest!") do (if not exist %%~dpb md %%~dpb)
for /f "tokens=1" %%c in (%%a) do (echo SZ%%c 1>>%!dest!)
)
第4楼 top 发表于 2010-02-10 20:22
新手上路 发帖 10 积分 11
Originally posted by tongzj at 2010-2-10 06:09 PM:
测试是否可用。

@echo off
setlocal enabledelayedexpansion
:: 设定A、B目录路径,后面不要有\
set pathA=c:\a
set pathB=c:\b
:: 计算A目录长度用于截取后面的路径 ...



谢谢 tongzj

基本可行,但替换后的文本,其代码 6 当头的前面应该加 SH ,而不是 SZ 。

我是新手,不知道如何将附件传上来。

tongzj A.文件夹 已放入你邮箱中 请查收

[ Last edited by top on 2010-2-10 at 20:45 ]
第5楼 asnahu 发表于 2010-02-10 23:48
初级用户 发帖 53 积分 99


[ Last edited by asnahu on 2010-2-10 at 23:51 ]
第6楼 top 发表于 2010-02-11 07:50
新手上路 发帖 10 积分 11
Originally posted by asnahu at 2010-2-10 11:48 PM:


[ Last edited by asnahu on 2010-2-10 at 23:51 ]



谢谢你的帮助

但,运行后没有反映,可能是没有 SED 的原因

SED 以下载,但不知道因放在那里,如何使用

刚开始学批处理,还请都指点
第7楼 tongzj 发表于 2010-02-11 09:31
初级用户 发帖 43 积分 49
已回复邮件,因为目录中带有空格,所以做了一些修改。

@echo off
setlocal enabledelayedexpansion
:: 设定A、B目录路径,后面不要有\
set pathA=c:\a
set pathB=c:\b

:: 计算A目录长度用于截取后面的路径
for /l %%a in (1,1,200) do (
if "!pathA:~%%a,1!"=="" (
set A=%%a
goto start
)
)

:start
:: 遍历A目录下子目录,如果B目录无此子目录则创建,替换所有txt文档
for /f "tokens=* delims=&" %%a in ('dir /b /s %pathA%\*.txt') do (
echo %%a
set dest=%%a
set dest=%pathB%!dest:~%A%!
if exist "!dest!" del /q /f "!dest!"
for /f "tokens=* delims=&" %%b in ("!dest!") do (if not exist "%%~dpb" md "%%~dpb")
for /f "tokens=1" %%c in ('type "%%a"') do (
set code=%%c
if "!code:~0,1!"=="6" (
echo SH%%c 1>>!dest!
) else (
echo SZ%%c 1>>!dest!
)
)
)
第8楼 top 发表于 2010-02-11 12:26
新手上路 发帖 10 积分 11
谢谢 tongzj 的帮助,『第 7 楼』的回复已通过。
第9楼 top 发表于 2010-02-12 08:24
新手上路 发帖 10 积分 11
另有一问题

能否将替换后的文本文件全部转换成 .SBK 的格式,如行的话,把所有 .SBK 文件放在 B 文件夹下,.sbk 样本在你邮箱中。
第10楼 terse 发表于 2010-02-12 10:30
银牌会员 发帖 946 积分 2,404
第11楼 top 发表于 2010-02-12 11:06
新手上路 发帖 10 积分 11
terse 请看邮箱 (采掘业.sbk)
第12楼 asnahu 发表于 2010-02-12 19:09
初级用户 发帖 53 积分 99
sed下载放到c:\windows\system32\下
第13楼 top 发表于 2010-02-12 21:40
新手上路 发帖 10 积分 11
谢谢 asnahu
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023