[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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、当然,可能文件不一定是上面举例字符个数,所以,可以这样处理,就是  从第几个字符开始 到第几字符结束 作为一行, 再从第几个字符到几个字符再一行。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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

评分人数

一路飘过的鸟~~~

TOP

怎么没有效果啊
只是多了个名称为  “$”   文件  也没有后缀,0KB 大小

TOP

本帖最后由 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 上尉的代码呢

TOP

回复 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. )
复制代码
早中晚各问自己一遍:你平均每周帮助别人解决几个问题?

TOP

哈哈哈
问题解决了,感谢ArdentMan 上尉  感谢 find  大校

其实 ArdentMan 上尉 的代码是好的,只是我试验的时候偷懒,新建的文本是 “ 新建 文本文档.txt” 中间有空格,所以没有执行。
find  大校  代码  相当于为我 提供了一个做备份的 考虑,  感谢啊。
个位 高手若有兴趣 可否 解释一下  文件命名有空格,致使代码没有执行的原因啊。

TOP

回复 6# iotalinen

如果文件名含有空格,可以写成这样的形式:
  1. for /f "usebackq" %%b in ("%%a") do (...)
复制代码
或者
  1. for /f  %%b in ('type "%%a"') do (...)
复制代码

TOP

回复 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. )
复制代码
早中晚各问自己一遍:你平均每周帮助别人解决几个问题?

TOP

十分感谢

代码实验执行成功

感谢
ArdentMan 上尉
find  大校
apang 上尉

TOP

返回列表