求一个批处理bat脚本,大神进来看看

旋转360 发布于 2016/06/09 19:00
阅读 585
收藏 1
Bat

我想实现这样的功能

比如在同一个文件夹下面有N个txt,命名随便啦,比如

mulu/
     1.txt
     2.txt
     dwwerwer.txt
     1rtyt459fjf.txt
     汉字.txt
然后我要替换每个txt里面的每行的每个字实现除了字母(不分大小写)和数字外,其他的都加上一个下滑线,行首位去掉空格意思是字母和数字的左右就不加,遇到汉子就加

比如:

某个txt里面原始字符(一行一个)
     这个一个1的财务司dfsfdsf梵蒂冈覆盖
分隔符G方法gJ454刚吩咐r个客户53个
替换后为
这_个_一_个_1_的_财_务_司dfsfdsf梵_蒂_冈_覆_盖
分_隔_符G方_法gJ454刚_吩_咐r个_客_户53个

不知道有木有描述清楚。

自己写了半天没写出来,只给行首加下划线,大神可以参考修改下


for %%a in (*.txt) do (
	for /f "tokens=*" %%i in ('type "%%a"') do echo_%%i>>"1%%a"
		del "%%a"
	ren "1%%a" "%%a"
)



加载中
0
a
ahfallen
该评论暂时无法显示,详情咨询 QQ 群:点此入群
黑暗圣堂武士
黑暗圣堂武士
这事批处理能干得很好。
0
旋转360
旋转360

引用来自“ahfallen”的评论

找虐,非得拿扳手当锤子用,这不是bat适用的范围

哦?那用什么好?

我用php写,基本上一个txt有几百k的情况下就崩溃或卡死。

0
a
ahfallen

 按道理,对于每一个txt,全部读入内存再处理,php应该没问题。我一般用python解决这类问题,但是python2的的中文编码处理起来比较麻烦,写出来需要针对对应的机器修改编码,所以就不写了。

0
yak
yak

可以用汇编写个替换中文字符的程序,然后在bat中调用  

就是不知道汇编如何显示utf8字符 

有一个用汇编写的编辑器只有13k大小 打开文件奇快,但就是不支持显示utf8字符,懂汇编的高手可以看一下代码

https://sites.google.com/site/highlevelassembly/downloads/savageed  下载后有开源的汇编代码

0
yak
yak
#include <stdio.h>
#include <string.h>

int main()
{

    char BUF[256];
    char DEST[512];    
    unsigned char *buf=BUF;
    unsigned char *p=DEST;
  

    fscanf( stdin, "%s", BUF );
    
    
    do {
        *(p++)=*buf;  
        if(*buf > 127) {
            *(p++) =*(++buf);
             if( *(buf+1) != '\0'){
                *(p++)='_';
            }
        }
   
    } while (*(buf++));

      printf("%s",DEST);

    return 0;
    
}



for  %%a in (*.txt) do(
  for /f "tokens=*" %%i in (%%a) do @echo %%i | underline.exe

)

输出结果:

这 _个_一_个_1的_财_务_司_dfsfdsf梵_蒂_冈_覆_盖

分_隔_符_G方_法_gJ454刚_吩_咐_r个_客_户_53个_k

...

0
旋转360
旋转360

引用来自“yak”的评论

#include <stdio.h>
#include <string.h>

int main()
{

    char BUF[256];
    char DEST[512];    
    unsigned char *buf=BUF;
    unsigned char *p=DEST;
    int i,len;

    fscanf( stdin, "%s", BUF );
    
    
    do {
        *(p++)=*buf;  
        if(*buf > 127) {
            *(p++) =*(++buf);
             if( *(buf+1) != '\0'){
                *(p++)='_';
            }
        }
   
    } while (*(buf++));

      printf("%s",DEST);

    return 0;
    
}



for  %%a in (*.txt) do(
  for /f "tokens=*" %%i in (%%a) do @echo %%i | underline.exe

)

输出结果:

这 _个_一_个_1的_财_务_司_dfsfdsf梵_蒂_冈_覆_盖

分_隔_符_G方_法_gJ454刚_吩_咐_r个_客_户_53个_k

...

这个是c++的么?好像我不会c
旋转360
旋转360
回复 @yak : 邮箱私发你了,谢谢
yak
yak
那我把exe发你
0
黑暗圣堂武士
黑暗圣堂武士
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
WolfX
WolfX
win下可以MINGW+bash来实现啊,bat不会写,不过bat应该是最适合的方式,毕竟不需要读文件,效率高
旋转360
旋转360
是啊,bat效率要高点
0
旋转360
旋转360
有会写的联系下,可以付费
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部