中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]批处理怎么能让字符串中包含回车符
作者:
标题: [求助]批处理怎么能让字符串中包含回车符 上一主题 | 下一主题
singlion
初级用户





积分 25
发帖 12
注册 2007-10-26
状态 离线
『楼 主』:  [求助]批处理怎么能让字符串中包含回车符

我想用批处理弄一个文本文件分割程序,功能是实现了,代码如下:
@echo off
cls & color 79
setlocal enabledelayedexpansion

:inputfilename
set /p txtfile=请输入要分割的文件位置及文件名:
if not defined txtfile goto :inputfilename

set /p lines=请输入每多少行分割为一个文件(请输入50到300之间的数):
if not defined lines set /a lines=100

cls
set /a line=0
set /a files=1
set filename=第!files!部分.txt
mode con lines=2
echo 正在写第1个文件...
set str=
for /f "delims=" %%i in (%txtfile%) do (
set /a line+=1
set str=!str!%%i
if "!line!"=="!lines!" (
echo !str!>!filename!
cls
set /a line=0
set /a files+=1
set filename=第!files!部分.txt
echo 正在写第!files!个文件...
set str=
)
)
echo !str!>!filename!
cls
echo 完成。按任意键退出程序...
pause>nul
del c:\tmp

但是留下一个问题,分割后的文件中,所有的回车符都显示成了黑块,但仅仅在记事本里这样,在写字板和Word里面都能正常显示。 并且用写字板打开之后,不做任何改动,直接保存,然后用记事本打开又正常了......

我觉得可能是因为set str=!str!%%i造成的,可能在%%i前面加一个能表示回车符的东西就行了,希望高手看看能不能这样做。

如果有其他实现的方法,也请不吝赐教,谢谢!



转移自 DOS疑难解答 & 问题讨论 (解答室)
明显发错版块,因属论坛新手,暂不予以处罚,但注册也有一年多了,应该对论坛有所熟悉了,望今后引起注意。
——管理员


2008-12-6 20:43
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (417493818)  编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

建议下次到批处理室提问



2008-12-6 21:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hackate
中级用户





积分 228
发帖 125
注册 2008-8-25
状态 离线
『第 3 楼』:  


@echo off
cls & color 79
setlocal enabledelayedexpansion

:inputfilename
set /p txtfile=请输入要分割的文件位置及文件名:
if not defined txtfile goto :inputfilename

set /p lines=请输入每多少行分割为一个文件(请输入50到300之间的数):
if not defined lines set /a lines=100
cls
set /a line=-1
set /a files=1
set filename=第!files!部分.txt
mode con lines=2
echo 正在写第1个文件...
for /f "delims=" %%i in (%txtfile%) do (
        set /a line+=1
        if "!line!"=="%lines%" (
            set /a line=0
            set /a files+=1
            set filename=第!files!部分.txt
            echo %%i>>!filename!
        ) else (
            echo %%i>>!filename!
        )
)
echo 完成。按任意键退出程序...
pause>nul


2008-12-7 13:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lifenjoiner
新手上路




积分 19
发帖 12
注册 2008-10-11
状态 离线
『第 4 楼』:  

我的:
@echo off
color 0a
setlocal enabledelayedexpansion

:inputfilename
set /p txtfilename=请输入要分割的文件位置及文件名:
if not defined txtfilename goto :inputfilename

set /p lset=请输入每多少行分割为一个文件(默认100行):
if not defined lset set /a lset=100

cls

set /a fnumb=1

set /a lnumb=0
set subfdr=%txtfilename:~0,-4%
rd /s /q "!subfdr!" 2>nul
md "!subfdr!"

for /f "delims=" %%i in (%txtfilename%) do (
   set filename="!subfdr!"\第!fnumb!部分.txt
   echo %%i>>!filename!
   set /a lnumb+=1
   if !lnumb!==1 (
      echo 正在写第!fnumb!个文件...
   )
   if !lnumb!==%lset% (
      set /a tnumb=!tnumb!+!lnumb!
      set /a lnumb=0
      set /a fnumb+=1
   )
)
set /a tnumb=!tnumb!+!lnumb!

echo 共!tnumb!行非空
echo 完成。按任意键退出程序...
pause>nul
鉴于这确实是频繁操作(写)一个磁盘文件,就是慢~
------
另外,建议singlion代码要写得规整一些,养成好的习惯。还有,你可以用vbs。。
------

[ Last edited by lifenjoiner on 2008-12-7 at 15:08 ]



抓住规律、结果整齐、代码简洁
2008-12-7 14:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lifenjoiner
新手上路




积分 19
发帖 12
注册 2008-10-11
状态 离线
『第 5 楼』:  

我以前的vbs
'''设置每篇字数
oLth=3500'''vb字
set fso=createobject("scripting.filesystemobject")
flpth=inputbox("the file to be splited","split joint.txt","joint.txt")

set fl=fso.opentextfile(flpth)
ctnt=fl.ReadAll
dl=MsgBox("是否符合段前空两格而优化",vbokcancel)
If dl=1 then
ctnt=Replace(ctnt,vbcrlf&"    ",vbcrlf&"ㄓ")
ctnt=Replace(ctnt,vbcrlf&"  ",vbcrlf&"ㄓ")
ctnt=Replace(ctnt," ","")
ctnt=Replace(ctnt," ","")
ctnt=Replace(ctnt,"ㄓ",vbcrlf&"  ")
for i=1 to 5
  ctnt=Replace(ctnt,vbcrlf&vbcrlf&vbcrlf&vbcrlf,vbcrlf)'''n-1=i times
  ctnt=Replace(ctnt,vbcrlf&vbcrlf,vbcrlf)
next
End if

fl.Close
Tlth=Len(ctnt)

If Tlth<oLth Then
MsgBox("已达要求")
else
newn=fso.GetBaseName(flpth)
extn=fso.GetExtensionName(flpth)
Tct=Tlth\oLth+1
n=0
Do
  n=n+1
  If Tct>=10^(n-1) And Tct<10^n Then Bct=n:Exit Do
Loop
Set fl=fso.GetFile(flpth)
Set bfdr=fso.GetFolder(fl.ParentFolder)
If fso.FolderExists(bfdr&"\"&newn)=true Then
  Set fdr=fso.getFolder(bfdr&"\"&newn)
else
  Set fdr=fso.CreateFolder(bfdr&"\"&newn)
End If
For i=1 To Tct
  strt=oLth*(i-1)+1
  ct=String(n-Len(i),"0")&i
  Set fl=fdr.CreateTextFile(ct&"."&extn)
  newf=Mid(ctnt,strt,oLth)
  fl.write newf
  fl.close
Next
End If
MsgBox("Done.分了"&Tct&"个文件.")




抓住规律、结果整齐、代码简洁
2008-12-7 15:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  

1年半之前的帖子,不知是否对楼主有帮助:
http://www.cn-dos.net/forum/viewthread.php?tid=31718



2008-12-9 14:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: