中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-26 01:27
47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行
DOS批处理 & 脚本技术(批处理室) » 将文本文件中的空格替换成|(已经解决)
可打印版本  4,728 / 19
第1楼 jinrich 发表于 2006-12-15 14:06
初级用户 发帖 11 积分 26
将文本文件中的空格替换成|(已经解决)
1.txt 里的内容为:
0 测量 1 小时 2006-12-13 00:00 简约
经p处理后生成2.txt
0|测量|1 小时|2006-12-13 00:00|简约

用下面的,问题解决了
@echo off

for /f "tokens=1-7" %%a in (d:\1.txt) do echo %%a^|%%b^%%c^ %%d^|%%e^ %%f^|%%g" >>2.txt

echo 2.txt done
pause >nul

就可以了,不过我的1.txt里字段太多了,有56个,26个字母不够用,你们有什么好的办法

我的解决方法:
@echo off
echo start to deal with 3.txt
echo.
echo waiting……

for /f "skip=1 tokens=1-25,*" %%a in (3.txt) do ( echo %%a^|%%b^|%%c^ %%d^|%%e^ %%f^|%%g^|%%h^ %%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v^|%%w^|%%x^|%%y^|%%z >>2.txt)
for /f "tokens=1-25,*" %%a in (2.txt) do ( echo %%a^ %%b^ %%c^|%%d^|%%e^|%%f^|%%g^|%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v%%w^|%%x%%y^|%%z >>22.txt)
for /f "tokens=1-16" %%a in (22.txt) do ( echo %%a^ %%b^ %%c%%d^|%%e%%f^|%%g%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o%%p >>222.txt)

echo 222.txt done
del /q 2.txt 22.txt
pause >nul
多谢大家的帮忙~

[ Last edited by namejm on 2006-12-25 at 08:29 AM ]
第2楼 jinrich 发表于 2006-12-15 14:35
初级用户 发帖 11 积分 26
自己做的 ,执行起来不行:
echo start to deal with 3.txt
echo.

setlocal enabledelayedexpansion
for /f "tokens=1-7" %%a in (d:\1.txt)
do (set char=|
set var=%%a!char!%%b!char!%%c! !%%d!char!%%e!char!%%f!char!%%g
echo !var!>>2.txt)
echo 2.txt done
pause >nul
第3楼 youxi01 发表于 2006-12-15 21:09
高级用户 发帖 247 积分 846 来自 湖南==》广东
有两个小的错误:
1、P中的for语句不同于其它语言,for中的do不能另起一行;
应该为:for /f "tokens=1-7" %%a in (d:\1.txt) do (
你的命令....)

2、set char=|应该改为:set “char=|” 或者使用转义字符:set char=^|
第4楼 ccwan 发表于 2006-12-15 21:14
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
试一下:
第5楼 jinrich 发表于 2006-12-15 22:23
初级用户 发帖 11 积分 26
谢谢,不过还是不行 ,2.txt 还是空的
第6楼 ccwan 发表于 2006-12-15 22:33
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
你的1.txt是在D盘吗?
第7楼 jinrich 发表于 2006-12-15 23:51
初级用户 发帖 11 积分 26
@echo off

for /f "tokens=1-7" %%a in (d:\1.txt) do echo %%a^|%%b^%%c^ %%d^|%%e^ %%f^|%%g" >>2.txt

echo 2.txt done
pause >nul

就可以了,不过我的1.txt里字段太多了,有56个,26个字母不够用,你们有什么好的办法
第8楼 zh159 发表于 2006-12-16 00:41
金牌会员 发帖 1,467 积分 3,687
如果按楼主的格式:
0 测量 1 小时 2006-12-13 00:00 简约


第9楼 lxmxn 发表于 2006-12-16 00:51
版主 发帖 4,938 积分 11,386

  试试下面这个:
第10楼 zh159 发表于 2006-12-16 02:08
金牌会员 发帖 1,467 积分 3,687
Originally posted by lxmxn at 2006-12-15 11:51:

  试试下面这个:
第11楼 youxi01 发表于 2006-12-16 02:13
高级用户 发帖 247 积分 846 来自 湖南==》广东
如果字段过多,就使用shift吧?
测试代码:

测试结果:
1.txt中的东西:


执行之后:
第12楼 lxmxn 发表于 2006-12-16 02:37
版主 发帖 4,938 积分 11,386
Originally posted by zh159 at 2006-12-16 02:08:

这个把“2006-12-13 00:00”分开了


  如果要按照楼主的要求来,可能没有好的办法,因为楼主的字段比较多,而且什么时候加|符号没有什么规律可言,汗一个先……
第13楼 jinrich 发表于 2006-12-16 03:04
初级用户 发帖 11 积分 26
谢谢各位,现在已经好啦
第14楼 ccwan 发表于 2006-12-16 03:20
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
那请楼主把代码和1.txt内容贴出来,大家一起学习学习。
第15楼 jinrich 发表于 2006-12-16 03:58
初级用户 发帖 11 积分 26
我用的方法比较麻烦一点,自己想的,中间也吸取了大家的教导才写出来的:
@echo off
echo start to deal with 3.txt
echo.
echo waiting……

for /f "skip=1 tokens=1-25,*" %%a in (3.txt) do ( echo %%a^|%%b^|%%c^ %%d^|%%e^ %%f^|%%g^|%%h^ %%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v^|%%w^|%%x^|%%y^|%%z >>2.txt)
for /f "tokens=1-25,*" %%a in (2.txt) do ( echo %%a^ %%b^ %%c^|%%d^|%%e^|%%f^|%%g^|%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v%%w^|%%x%%y^|%%z >>22.txt)
for /f "tokens=1-16" %%a in (22.txt) do ( echo %%a^ %%b^ %%c%%d^|%%e%%f^|%%g%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o%%p >>222.txt)

echo 222.txt done
del /q 2.txt 22.txt
pause >nul

有什么能改进的还请指出来
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023