标题: [求助]批处理怎么能让字符串中包含回车符
[打印本页]
作者: 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
1年半之前的帖子,不知是否对楼主有帮助:
http://www.cn-dos.net/forum/viewthread.php?tid=31718