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

[文本处理] [已解决]bat在读取非ANSI格式的文本时的问题

[复制链接]
发表于 2014-6-20 23:19:53 | 显示全部楼层 |阅读模式
本帖最后由 iq301 于 2014-6-22 18:20 编辑

bat在读取非ANSI格式的文本时,没有数值输出,我试过用finstr  type more 都不行,
附件599.txt是从LINUX服务器生成的文本,在for里面运行以下bat,会读取不了。

@echo off& setlocal enabledelayedexpansion
for /f "tokens=* delims= " %%a in ('findstr . G:\bat\599.txt') do (
set a=%%a&set a=!a:008C=        !
set b==!a:telepath=        !
set c==!b:08C=        !
set d==!c:01101C=        !
set aa=!d:100C=        success        !
for /f "tokens=1,2,3,4,5,6 delims=         " %%e in ("!aa!") do (
echo        %%f        %%h        %%i        %%j
)
) >>g:\bat\5.txt
endlocal
pause  

请教一:bat在读取非ANSI格式的文本时,如果修改里面的内容,会直接导致文本排序很乱,有没方法可以把非ANSI格式的文本转换成ANSI格式的文本
二:以上代码在把599.txt最后一行的空行删除或随意修改一下,就能读取到,这是为何?

评分

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

查看全部评分

发表于 2014-6-20 23:34:47 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in ('more 599.txt ^| findstr "telepath"') do (
  4.     set a=%%a
  5.     set a=!a:008C=        !
  6.     set b==!a:telepath=        !
  7.     set c==!b:08C=        !
  8.     set d==!c:01101C=        !
  9.     set aa=!d:100C=        success        !
  10.     for /f "tokens=1-6" %%e in ("!aa!") do (
  11.         echo        %%f        %%h        %%i        %%j
  12.     )
  13. ))>599_new.txt
复制代码
 楼主| 发表于 2014-6-20 23:51:45 | 显示全部楼层
回复 2# Batcher


    谢谢,其实这问题之前已请教过,但是我就是找不出原因在哪。为什么findstr会读不出
发表于 2014-6-21 00:21:19 | 显示全部楼层
回复 3# iq301


    没有为什么,它就是不支持那种格式。
发表于 2014-6-21 00:49:50 | 显示全部楼层
这不是编码的问题,是行结束符的问题
不含宽字符的无 BOM utf-8 与 ansi 无区别
 楼主| 发表于 2014-6-21 12:55:00 | 显示全部楼层
嗯,谢谢你们的帮助。
发表于 2014-6-21 13:03:00 | 显示全部楼层
本人拙帖 《面向对象之妙》系列的第五季,《powershell占用内存之妙》中,http://www.bathome.net/thread-30621-1-1.html
说明了 powershell为什么是处理unicode最好的脚本语言!没有之一。你用它解决你的问题最简单。
简单来说,powershell对  编码,换行,识别的妙。
发表于 2014-6-21 18:22:52 | 显示全部楼层
本帖最后由 CrLf 于 2014-6-21 18:41 编辑

gawk:
  1. gawk "{gsub(/008C|telepath|08C|01101C/,"    ");gsub(/100C/,"success    ");$1=$1;printf("       %s        %s        %s        %s\n",$2,$4,$5,$6);exit}" 599.txt>599_修改.txt
复制代码
perl:
  1. open(IN,'599.txt');
  2. open(OUT, ">599_修改.txt");

  3. foreach(<IN>){
  4.         $_ =~ s/008C|telepath|08C|01101C/    /ig;
  5.         $_ =~ s/100C/    success    /ig;
  6.         @a = split;
  7.         printf(OUT "       %s        %s        %s        %s\n",
  8.                 @a[1],@a[3],@a[4],@a[5]);
  9. }
复制代码
 楼主| 发表于 2014-6-22 18:19:18 | 显示全部楼层
thank you very much~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 07:40 , Processed in 0.041031 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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