找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24282|回复: 8

[文本处理] [已解决]批处理怎样改变文件字符串排列?

[复制链接]
发表于 2012-3-31 22:55:38 | 显示全部楼层 |阅读模式
本帖最后由 iotalinen 于 2012-4-2 20:34 编辑

有一批 *.txt 或 *.asc   文件,每个文件 内容大致相同
例如   2.000000.00.0-2.00000123456.123456654321.654321
修改为  

2.00
0.0
0.0
-2.00
123456.123
654321.654

补充
1、每个文件,各部分相关内容的字符串长度是固定,也就是说,可拆开看做    2.00000   0.0    0.0   -2.00000   123456.123456   654321.654321
2、当然,可能文件不一定是上面举例字符个数,所以,可以这样处理,就是  从第几个字符开始 到第几字符结束 作为一行, 再从第几个字符到几个字符再一行。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-4-1 07:34:31 | 显示全部楼层

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For %%a In (*.txt *.csv) Do (
  3.   (For /F %%b In (%%a) Do (
  4.     Set "Str=%%b"
  5.     Echo !Str:~,4!
  6.     Echo !Str:~4,3!
  7.     Echo !Str:~7,3!
  8.     Echo !Str:~10,4!
  9.     Echo !Str:~14,10!
  10.     Echo !Str:~-10!
  11.   ))>$
  12.   move $ %%a
  13. )
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-4-1 20:07:41 | 显示全部楼层
怎么没有效果啊
只是多了个名称为  “$”   文件  也没有后缀,0KB 大小
 楼主| 发表于 2012-4-1 21:40:26 | 显示全部楼层
本帖最后由 iotalinen 于 2012-4-1 21:41 编辑
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For %%a In (1.txt) Do (
  3.   (For /F %%b In (%%a) Do (
  4.     Set "Str=%%b"
  5.     Echo !Str:~,4!
  6.     Echo !Str:~7,3!
  7.     Echo !Str:~10,3!
  8.     Echo !Str:~13,5!
  9.     Echo !Str:~21,10!
  10.     Echo !Str:~34,10!
  11.   ))>$
  12.   move $ %%a
  13. )
复制代码
我又细琢磨了一下,试了一下,将原文件 改为 “1.txt”  并把 原来代码的 For %%a In (1.txt) Do (     改为       For %%a In (1.txt) Do (
( 其余的只是改了一下具体截取字段的位置,小问题而已)
然后就可以执行了,将  “1.txt”  这一个文件 修改为我原来希望的效果

所以,问题是,我如果有一批呢, “1.txt”  “2.txt”  “3.txt” 呢,还是说  我没有搞懂  ArdentMan 上尉的代码呢
发表于 2012-4-1 21:52:39 | 显示全部楼层
回复 4# iotalinen
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.txt) do (
  4.     (for /f %%b in (%%a) do (
  5.         set "str=%%b"
  6.         echo !str:~,4!
  7.         echo !str:~4,3!
  8.         echo !str:~7,3!
  9.         echo !str:~10,4!
  10.         echo !str:~14,10!
  11.         echo !str:~-10!
  12.     ))>$
  13.     move $ %%a.new
  14. )
复制代码
 楼主| 发表于 2012-4-2 20:39:55 | 显示全部楼层
哈哈哈
问题解决了,感谢ArdentMan 上尉  感谢 find  大校

其实 ArdentMan 上尉 的代码是好的,只是我试验的时候偷懒,新建的文本是 “ 新建 文本文档.txt” 中间有空格,所以没有执行。
find  大校  代码  相当于为我 提供了一个做备份的 考虑,  感谢啊。
个位 高手若有兴趣 可否 解释一下  文件命名有空格,致使代码没有执行的原因啊。
发表于 2012-4-3 00:54:05 | 显示全部楼层
回复 6# iotalinen

如果文件名含有空格,可以写成这样的形式:
  1. for /f "usebackq" %%b in ("%%a") do (...)
复制代码
或者
  1. for /f  %%b in ('type "%%a"') do (...)
复制代码
发表于 2012-4-3 09:13:27 | 显示全部楼层
回复 6# iotalinen
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.txt) do (
  4.     (for /f "usebackq" %%b in ("%%a") do (
  5.         set "str=%%b"
  6.         echo !str:~,4!
  7.         echo !str:~4,3!
  8.         echo !str:~7,3!
  9.         echo !str:~10,4!
  10.         echo !str:~14,10!
  11.         echo !str:~-10!
  12.     ))>$
  13.     move $ "%%a.new"
  14. )
复制代码
 楼主| 发表于 2012-4-3 20:27:40 | 显示全部楼层
十分感谢

代码实验执行成功

感谢
ArdentMan 上尉
find  大校
apang 上尉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 21:07 , Processed in 0.022764 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表