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

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

本帖最后由 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最后一行的空行删除或随意修改一下,就能读取到,这是为何?
1

评分人数

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

thank you very much~

TOP

本帖最后由 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. }
复制代码

TOP

本人拙帖 《面向对象之妙》系列的第五季,《powershell占用内存之妙》中,http://www.bathome.net/thread-30621-1-1.html
说明了 powershell为什么是处理unicode最好的脚本语言!没有之一。你用它解决你的问题最简单。
简单来说,powershell对  编码,换行,识别的妙。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

嗯,谢谢你们的帮助。

TOP

这不是编码的问题,是行结束符的问题
不含宽字符的无 BOM utf-8 与 ansi 无区别

TOP

回复 3# iq301


    没有为什么,它就是不支持那种格式。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    谢谢,其实这问题之前已请教过,但是我就是找不出原因在哪。为什么findstr会读不出

TOP

  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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表