中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » N多文件进行批量的固定长度回车并删掉空格的问题
« [1] [2] »
作者:
标题: N多文件进行批量的固定长度回车并删掉空格的问题 上一主题 | 下一主题
zhengruijian
初级用户





积分 54
发帖 24
注册 2008-5-30
状态 离线
『楼 主』:  N多文件进行批量的固定长度回车并删掉空格的问题

跪求大侠,我实在是搞不定了.请你们帮忙啊!!!!多谢了!!!..
请大侠指点迷津!
我想对一个文件夹下的所有文件进行固定字符长度的回车.(30个汉字的长度)
在整理完长度后把里面的空格行全都删除掉.再保存,原文件名不变.
应该怎么做啊?
多谢啦!!!!!!!!!!!!

我只找到了下面这个程序只能执行一个文件,而且还不能保存.
@echo off
for /f "delims=" %%a in (yourtext.txt) do (
   set var=%%a
   setlocal enabledelayedexpansion
   set var=!var: =!
   if not "!var!"=="" set var=!var: =!
   if not "!var!"=="" echo !var!
   endlocal
)
pause

我要处理的范文如下 :


8、        I Apologize.
我很抱歉。

A: Jessie, I’m afraid I can’t come back home for dinner tonight.
杰茜,我恐怕今晚不能回家吃晚饭了。

B: Not back home for dinner again? That’s the third time this week!
又不回家吃晚饭?这个星期你已经是第三次了这样了!

A: I’m sorry. Our company has just opened. There are always too many things to handle. You know that.
对不起。我们的公司刚刚开业,总是有太多事情要处理,这你是知道的。

B: You don’t have to explain. Suit yourself.
你不必解释了。随便你。

A: I apologize. You have my word, I’ll spend some time with you on the weekend. I promise.
很抱歉。我向你保证,周末抽时间来陪你。我发誓。

B: We’ll see.
再说吧。

A: Thank you for understanding. I promise I’ll make it up to you.
谢谢你能理解。我保证一定给你补上。
                                                                                                            

A: Sam, you’ve got to forgive me.
山姆,你得原谅我。

B: Forgive you for what?
原谅你什么?

A: I used your computer. And I’m afraid I’ve erased your personal files accidentally.
我用了你的电脑。恐怕我不小心把你的私人文件删掉了。

B: No! Are you kidding me?
不!你跟我开玩笑?

A: I’m afraid not. I apologize.
不是。我很抱歉。

B: I can’t believe it! I have all my important personal documents stored in that computer. It’s no laughing matter.
我简直不敢相信!我将所有重要的私人资料都存入电脑了。这可不是闹着玩的。

A: I told you I’m sorry. What can I do to make it up to you?
我都跟你道歉了。我怎样做才能弥补我的过错?

B: Well, you should be sorry! Don’t ever use my computer again! You can’t do anything now, it’s too late!
你应该道歉!再也不许用我的电脑了!现在你做什么都没有用了,已经太迟了!

2008-6-1 12:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

findstr好像有空行过滤吧

   此帖被 +2 点积分    点击查看详情   
评分人:【 hjkk123 分数: +2  时间:2008-6-1 15:01




S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-6-1 14:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 3 楼』:  

楼上有笔误吧,for才过滤空行
@echo off
::放在要处理的目录里运行
::不能处理汉字(即无论汉字或英文, 超过60个才能处理)
::注意: 非空格行不能以空格开头
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b/a-d "*.txt"') do (
   type nul>temp.txt
   for /f "delims=" %%m in ('type "%%i"') do (
      set "str=%%m"
      if "!str:~0,1!"==" " (set "str=!str: =!") else (call :cut)
   )
   move /y temp.txt "%%i"
)
goto :eof
:cut
set "var=%str:~0,60%"
>>temp.txt echo %var%
set str=%str:~60%
if not "%str%"=="" goto :cut


2008-6-1 16:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
clonecd
初级用户





积分 94
发帖 46
注册 2006-5-14
状态 离线
『第 4 楼』:  

标题说删除空格,文章里面说删除空格行,一开始还真不知道是什么意思。

[ Last edited by clonecd on 2008-6-1 at 04:57 PM ]

2008-6-1 16:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 5 楼』:  

因为有中英文 我是这样处理的:
汗我以为要删空格  改吧
@echo off
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
    for /f "delims=" %%a in ('more "%%i"') do (
   set var=%%a
   setlocal enabledelayedexpansion
   call :lp
   endlocal
   )
   move /y temp_.txt "%%i"
)
pause&goto :eof
:lp
if not defined var goto :eof
    if "%var:~,1%"==" " set var=%var:~1%&goto lp
    if "%var:~,1%"==" " set var=%var:~1%&goto lp
    if "%var:~,1%" gtr "Z" (
:lp1
    if defined var >>temp_.txt echo %var:~,30%&set var=%var:~30%&goto lp1
    goto :eof
    ) else (
:lp2
if defined var (>>temp_.txt echo !var:~,60!&set var=%var:~60%&goto lp2))
[ Last edited by terse on 2008-6-1 at 05:50 PM ]



简单!简单!再简单!
2008-6-1 17:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 6 楼』:  

to:5楼
运行结果:

  Quote:
E:\games\test>1
此时不应有 )。

把最后一个括号去掉后没有提示,直接退出.

  Quote:
E:\games\test>1

E:\games\test>for /F "delims=" %i in ('dir /b /a-d *.txt') do (
for /F "delims=" %a in ('more "%i"') do (
set var=%a
setlocal enabledelayedexpansion
call :lp
endlocal
)
move /y temp_.txt "%i"
)

E:\games\test>(
for /F "delims=" %a in ('more "1.txt"') do (
set var=%a
setlocal enabledelayedexpansion
call :lp
endlocal
)
move /y temp_.txt "1.txt"
)

E:\games\test>(
set var=B: We’ll see.
setlocal enabledelayedexpansion
call :lp
endlocal
)

E:\games\test>if not defined var goto :eof

E:\games\test>if "B" == " " set var=: We’ll see.  & goto lp

E:\games\test>if "B" == " " set var=: We’ll see.  & goto lp

E:\games\test>
E:\games\test>

[ Last edited by moniuming on 2008-6-1 at 07:55 PM ]

2008-6-1 19:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 7 楼』:  =。=我没有打错。。。

@echo off
findstr "." Slore.txt>erolS.txt
::下面的空格数你自己可以多打点,按你的格式
::来看连续这么多空格应该够了。
findstr  /v /c:"               " erolS.txt>Slore.txt
echo 处理完毕!
pause>nul

[ Last edited by slore on 2008-6-1 at 08:55 PM ]



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-6-1 20:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhengruijian
初级用户





积分 54
发帖 24
注册 2008-5-30
状态 离线
『第 8 楼』:  

谢谢各位大哥的帮助.
用了达人的这个代码处理得很好,只是不能处理汉字,英文倒是排得好好的.不知道怎么样能做成处理汉字的?就是说30个汉字的长度也换行.下面的代码该如何改善一下才能做到呢?

@echo off
::放在要处理的目录里运行
::不能处理汉字(即无论汉字或英文, 超过60个才能处理)
::注意: 非空格行不能以空格开头
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b/a-d "*.txt"') do (
   type nul>temp.txt
   for /f "delims=" %%m in ('type "%%i"') do (
      set "str=%%m"
      if "!str:~0,1!"==" " (set "str=!str: =!") else (call :cut)
   )
   move /y temp.txt "%%i"
)
goto :eof
:cut
set "var=%str:~0,60%"
>>temp.txt echo %var%
set str=%str:~60%
if not "%str%"=="" goto :cut


我用上面这个程序把范文处理后是这样的:
8、        I Apologize.
我很抱歉。
A: Jessie, I’m afraid I can’t come back home for dinner toni
ght.
杰茜,我恐怕今晚不能回家吃晚饭了。
B: Not back home for dinner again? That’s the third time thi
s week
又不回家吃晚饭?这个星期你已经是第三次了这样了!
A: I’m sorry. Our company has just opened. There are always
too many things to handle. You know that.
对不起。我们的公司刚刚开业,总是有太多事情要处理,这你是知道的。
B: You don’t have to explain. Suit yourself.
你不必解释了。随便你。
A: I apologize. You have my word, I’ll spend some time with
you on the weekend. I promise.
很抱歉。我向你保证,周末抽时间来陪你。我发誓。
B: We’ll see.
再说吧。
A: Thank you for understanding. I promise I’ll make it up to
you.
谢谢你能理解。我保证一定给你补上。
A: Sam, you’ve got to forgive me.
山姆,你得原谅我。
B: Forgive you for what?
原谅你什么?
A: I used your computer. And I’m afraid I’ve erased your per
sonal files accidentally.
我用了你的电脑。恐怕我不小心把你的私人文件删掉了。
B: No Are you kidding me?
不!你跟我开玩笑?
A: I’m afraid not. I apologize.
不是。我很抱歉。
B: I can’t believe it I have all my important personal docum
ents stored in that computer. It’s no laughing matter.
我简直不敢相信!我将所有重要的私人资料都存入电脑了。这可不是闹着玩的。
A: I told you I’m sorry. What can I do to make it up to you?
我都跟你道歉了。我怎样做才能弥补我的过错?
B: Well, you should be sorry You can’t do anything now, it’s
too late
你应该道歉!再也不许用我的电脑了!现在你做什么都没有用了,已经太迟了!

2008-6-1 20:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  

。。。原来是这个意思。。。一个汉字算2个字节还是要怎么样呀?



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-6-1 21:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhengruijian
初级用户





积分 54
发帖 24
注册 2008-5-30
状态 离线
『第 10 楼』:  

@echo off
::放在要处理的目录里运行
::不能处理汉字(即无论汉字或英文, 超过60个才能处理)
::注意: 非空格行不能以空格开头
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b/a-d "*.txt"') do (
   type nul>temp.txt
   for /f "delims=" %%m in ('type "%%i"') do (
      set "str=%%m"
      if "!str:~0,1!"==" " (set "str=!str: =!") else (call :cut)
   )
   move /y temp.txt "%%i"
)
goto :eof
:cut
set "var=%str:~0,30%"
>>temp.txt echo %var%
set str=%str:~30%
if not "%str%"=="" goto :cut

这个程序扩展性不错啊.我把里面的60全改为30后,处理成如下这个样子,可是英文看起来是真的很不爽啊.一句话搞成了好几行.
我想好好排下版的目的就是把这些文本做成LRC的歌词格式.我有配套的MP3.如果做好了哪位兄弟要的话,我可以传给你们啊.大家相互帮忙一下啊!
哪位大哥能把这个程序改善下啊.就是排版出来都是30个汉字长度才回车.那样大家都看得舒服些.



8、        I Apologize.
我很抱歉。
A: Jessie, I’m afraid I can’t
come back home for dinner toni
ght.
杰茜,我恐怕今晚不能回家吃晚饭了。
B: Not back home for dinner ag
ain? That’s the third time thi
s week
又不回家吃晚饭?这个星期你已经是第三次了这样了!
A: I’m sorry. Our company has
just opened. There are always
too many things to handle. You
know that.
对不起。我们的公司刚刚开业,总是有太多事情要处理,这你是知道
的。
B: You don’t have to explain.
Suit yourself.
你不必解释了。随便你。
A: I apologize. You have my wo
rd, I’ll spend some time with
you on the weekend. I promise.
很抱歉。我向你保证,周末抽时间来陪你。我发誓。
B: We’ll see.
再说吧。
A: Thank you for understanding
. I promise I’ll make it up to
谢谢你能理解。我保证一定给你补上。
A: Sam, you’ve got to forgive
me.
山姆,你得原谅我。
B: Forgive you for what?
原谅你什么?
A: I used your computer. And I
’m afraid I’ve erased your per
sonal files accidentally.
我用了你的电脑。恐怕我不小心把你的私人文件删掉了。
B: No Are you kidding me?
不!你跟我开玩笑?
A: I’m afraid not. I apologize
.
不是。我很抱歉。
B: I can’t believe it I have a
ll my important personal docum
ents stored in that computer.
It’s no laughing matter.
我简直不敢相信!我将所有重要的私人资料都存入电脑了。这可不是
闹着玩的。
A: I told you I’m sorry. What
can I do to make it up to you?
我都跟你道歉了。我怎样做才能弥补我的过错?
B: Well, you should be sorry Y
ou can’t do anything now, it’s
你应该道歉!再也不许用我的电脑了!现在你做什么都没有用了,已
经太迟了!

2008-6-1 21:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhengruijian
初级用户





积分 54
发帖 24
注册 2008-5-30
状态 离线
『第 11 楼』:  

忘了说了,上面的范文是疯狂英语里面的一篇..希望大家帮忙,我想学好英语.

[ Last edited by zhengruijian on 2008-6-1 at 09:21 PM ]

2008-6-1 21:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by moniuming at 2008-6-1 19:54:
to:5楼
运行结果:

把最后一个括号去掉后没有提示,直接退出.


[ Last edited by moniuming on 2008-6-1 at 07:55 PM ]

怎么回事 我这里可以的嘛
下面是处理后的:
8、        I Apologize.
我很抱歉。

A: Jessie, I’m afraid I can’t come back home for dinner tonight.
杰茜,我恐怕今晚不能回家吃晚饭了。

B: Not back home for dinner again? That’s the third time this week!
又不回家吃晚饭?这个星期你已经是第三次了这样了!

A: I’m sorry. Our company has just opened. There are always too many things to handle. You know that.
对不起。我们的公司刚刚开业,总是有太多事情要处理,这你是知道的。

B: You don’t have to explain. Suit yourself.
你不必解释了。随便你。

A: I apologize. You have my word, I’ll spend some time with you on the weekend. I promise.
很抱歉。我向你保证,周末抽时间来陪你。我发誓。

B: We’ll see.
再说吧。

A: Thank you for understanding. I promise I’ll make it up to you.
谢谢你能理解。我保证一定给你补上。
                                                                                                            

A: Sam, you’ve got to forgive me.
山姆,你得原谅我。

B: Forgive you for what?
原谅你什么?

A: I used your computer. And I’m afraid I’ve erased your personal files accidentally.
我用了你的电脑。恐怕我不小心把你的私人文件删掉了。

B: No! Are you kidding me?
不!你跟我开玩笑?

A: I’m afraid not. I apologize.
不是。我很抱歉。

B: I can’t believe it! I have all my important personal documents stored in that computer. It’s no laughing matter.
我简直不敢相信!我将所有重要的私人资料都存入电脑了。这可不是闹着玩的。

A: I told you I’m sorry. What can I do to make it up to you?
我都跟你道歉了。我怎样做才能弥补我的过错?

B: Well, you should be sorry! Don’t ever use my computer again! You can’t do anything now, it’s too late!
你应该道歉!再也不许用我的电脑了!现在你做什么都没有用了,已经太迟了!




简单!简单!再简单!
2008-6-1 22:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 13 楼』:  

?貌似没有除了的样子呀=。=



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-6-1 22:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 14 楼』:  

弄得我头都大了(借用5楼的判断方法),这次应该没问题了,汗.........
@echo off
for /f "delims=" %%i in ('dir /b/a-d "*.txt"') do (
   type nul>temp.txt
   for /f "delims=" %%m in ('type "%%i"') do (
      set "str=%%m"
      call :cut
   )
   move /y temp.txt "%%i"
)
pause&goto :eof
:cut
if "%str:~,1%"==" " (
   if not "%str:~1%"=="" (
      set "str=%str:~1%"&goto :cut
      ) else (
         goto :eof
         )
)
if "%str:~,1%"==" " (
   if not "%str:~1%"=="" (
      set "str=%str:~1%"&goto :cut
      ) else (
         goto :eof
         )
)
if "%str:~,1%" gtr "Z" (
:cut1
   >>temp.txt echo %str:~,30%
   if not "%str:~30%"=="" (
      set "str=%str:~30%"&goto :cut1
      ) else (
         goto :eof
         )
   ) else (
:cut2
      >>temp.txt echo %str:~,60%
      if not "%str:~60%"=="" (
         set "str=%str:~60%"&goto :cut2
         ) else (
            goto :eof
            )
)


2008-6-1 22:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 15 楼』:  

我刚才 发出来怎么这样啊  这样呢
8、        I Apologize.
我很抱歉。
A: Jessie, I’m afraid I can’t come back home for dinner toni
ght.
杰茜,我恐怕今晚不能回家吃晚饭了。
B: Not back home for dinner again? That’s the third time thi
s week
又不回家吃晚饭?这个星期你已经是第三次了这样了!
A: I’m sorry. Our company has just opened. There are always
too many things to handle. You know that.
对不起。我们的公司刚刚开业,总是有太多事情要处理,这你是知道
的。
B: You don’t have to explain. Suit yourself.
你不必解释了。随便你。
A: I apologize. You have my word, I’ll spend some time with
you on the weekend. I promise.
很抱歉。我向你保证,周末抽时间来陪你。我发誓。
B: We’ll see.
再说吧。
A: Thank you for understanding. I promise I’ll make it up to
you.
谢谢你能理解。我保证一定给你补上。
A: Sam, you’ve got to forgive me.
山姆,你得原谅我。
B: Forgive you for what?
原谅你什么?
A: I used your computer. And I’m afraid I’ve erased your per
sonal files accidentally.
我用了你的电脑。恐怕我不小心把你的私人文件删掉了。
B: No! Are you kidding me?
不!你跟我开玩笑?
A: I’m afraid not. I apologize.
不是。我很抱歉。
B: I can’t believe it! I have all my important personal docu
ments stored in that computer. It’s no laughing matter.
我简直不敢相信!我将所有重要的私人资料都存入电脑了。这可不是
闹着玩的。
A: I told you I’m sorry. What can I do to make it up to you?
我都跟你道歉了。我怎样做才能弥补我的过错?
B: Well, you should be sorry! Don’t ever use my computer aga
in



简单!简单!再简单!
2008-6-1 22:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: