标题: [求助]批处理怎么能让字符串中包含回车符 
[打印本页]
作者: singlion     
时间: 2008-12-6 20:43    
标题: [求助]批处理怎么能让字符串中包含回车符
我想用批处理弄一个文本文件分割程序,功能是实现了,代码如下: 
@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疑难解答 & 问题讨论 (解答室)
明显发错版块,因属论坛新手,暂不予以处罚,但注册也有一年多了,应该对论坛有所熟悉了,望今后引起注意。
——管理员
 
作者: HAT     
时间: 2008-12-6 21:02
建议下次到批处理室提问
作者: hackate     
时间: 2008-12-7 13:29
@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
 
作者: lifenjoiner     
时间: 2008-12-7 14:59
我的:
@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 ]
 
作者: lifenjoiner     
时间: 2008-12-7 15:21
我以前的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&"个文件.")
 
作者: HAT     
时间: 2008-12-9 14:33