|
top
新手上路

积分 11
发帖 10
注册 2008-5-27
状态 离线
|
『楼 主』:
[已通过] 如何批量读取文本并替换内容
最近弄了个板块分类,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 ]
|
|
2010-2-9 16:59 |
|
|
top
新手上路

积分 11
发帖 10
注册 2008-5-27
状态 离线
|
|
2010-2-10 16:18 |
|
|
tongzj
初级用户
 
积分 49
发帖 43
注册 2007-1-20
状态 离线
|
『第
3 楼』:
测试是否可用。
@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!)
)
|
|
2010-2-10 18:09 |
|
|
top
新手上路

积分 11
发帖 10
注册 2008-5-27
状态 离线
|
『第
4 楼』:
Quote: | 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 ]
|
|
2010-2-10 20:22 |
|
|
asnahu
初级用户
 
积分 99
发帖 53
注册 2006-8-18
状态 离线
|
『第
5 楼』:
sed -i "s/\s.*//g; s/^0/SZ&/g; s/^6/SH&/g" *.txt [ Last edited by asnahu on 2010-2-10 at 23:51 ]
|
|
2010-2-10 23:48 |
|
|
top
新手上路

积分 11
发帖 10
注册 2008-5-27
状态 离线
|
『第
6 楼』:
Quote: | Originally posted by asnahu at 2010-2-10 11:48 PM:
sed -i "s/\s.*//g; s/^0/SZ&/g; s/^6/SH&/g" *.txt [ Last edited by asnahu on 2010-2-10 at 23:51 ] |
|
谢谢你的帮助
但,运行后没有反映,可能是没有 SED 的原因
SED 以下载,但不知道因放在那里,如何使用
刚开始学批处理,还请都指点
|
|
2010-2-11 07:50 |
|
|
tongzj
初级用户
 
积分 49
发帖 43
注册 2007-1-20
状态 离线
|
『第
7 楼』:
已回复邮件,因为目录中带有空格,所以做了一些修改。
@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!
)
)
)
此帖被 +1 点积分 点击查看详情 评分人:【 top 】 | 分数: +1 | 时间:2010-2-11 12:45 |
|
|
|
2010-2-11 09:31 |
|
|
top
新手上路

积分 11
发帖 10
注册 2008-5-27
状态 离线
|
『第
8 楼』:
谢谢 tongzj 的帮助,『第 7 楼』的回复已通过。
|
|
2010-2-11 12:26 |
|
|
top
新手上路

积分 11
发帖 10
注册 2008-5-27
状态 离线
|
『第
9 楼』:
另有一问题
能否将替换后的文本文件全部转换成 .SBK 的格式,如行的话,把所有 .SBK 文件放在 B 文件夹下,.sbk 样本在你邮箱中。
|
|
2010-2-12 08:24 |
|
|
terse
银牌会员
    
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
10 楼』:
@echo off&setlocal enabledelayedexpansion
set "a=c:\a\"
set "b=c:\b\"
for /f "delims=" %%a in ('dir /b /s /a-d "%a%*.txt"') do (
set "str=%%~dpna"
for %%b in ("!str:%a%=%b%!") do >nul 2>nul md "%%~dpb"
(for /f "usebackq" %%i in ("%%a") do (
if "%%i" lss "6" (echo sz%%i)else echo sh%%i
))>"!str:%a%=%b%!.SBK"
)
pause
|

简单!简单!再简单! |
|
2010-2-12 10:30 |
|
|
top
新手上路

积分 11
发帖 10
注册 2008-5-27
状态 离线
|
『第
11 楼』:
terse 请看邮箱 (采掘业.sbk)
|
|
2010-2-12 11:06 |
|
|
asnahu
初级用户
 
积分 99
发帖 53
注册 2006-8-18
状态 离线
|
『第
12 楼』:
sed下载放到c:\windows\system32\下
|
|
2010-2-12 19:09 |
|
|
top
新手上路

积分 11
发帖 10
注册 2008-5-27
状态 离线
|
|
2010-2-12 21:40 |
|