标题: [文本处理] 批处理为何只能生成31个文件? [打印本页]
作者: danny123 时间: 2011-2-12 20:39 标题: 批处理为何只能生成31个文件?
- @echo off
- setlocal enabledelayedexpansion
-
- set /a n=0
- :loop
- set /a n+=1
- FOR /F "tokens=%n% delims=/" %%i in (gj.txt,58.txt) do @echo %%i >> cp%n%.txt
- goto :loop
复制代码
以上代码从gj.txt,58.txt 二个文本中各抽取一行内容组成新的文本,gj.txt,58.txt中的内容用“/”分隔
目前生成的cp**文件只能从cp1.txt到cp31.txt,只能生成31个文档,
gj.txt内容为- qq情侣网名_/qq个性网名_/qq网名大全_/qq伤感网名_/qq网名繁体字_/2011qq网名_/腾讯qq网名_/腾讯网名_/qq非主流网名_/qq英文网名_/qq个性情侣网名_/qq非主流情侣网名_/qq情侣网名大全_/2011qq情侣网名_/qq英文情侣网名_/qq飞车情侣网名_/腾讯qq情侣网名_/qq空间情侣网名_/qq炫舞情侣网名_/qq伤感情侣网名_/2011qq个性网名_/qq非主流个性网名_/qq个性伤感网名_/qq女生个性网名_/qq个性英文网名_/腾讯qq个性网名_/qq性格网名_/qq男生个性网名_/qq个性网名繁体字_/2011qq网名大全_/qq网名繁体字大全_/qq网名大全男_/qq长网名大全_/qq英文网名大全_/腾讯qq网名大全_/qq男生网名大全_/qq女生网名大全_/2011qq情侣网名大全_/qq男生伤感网名_/qq非主流伤感网名_/2011qq伤感网名_/qq女生伤感网名_/伤感的qq网名_/qq伤感网名男_/qq网名伤感繁体字_/qq伤感长网名_/qq情侣网名繁体字_/qq网名繁体字转换器_/2011qq网名繁体字_/qq网名繁体字女生_/qq非主流网名繁体字_/qq男生网名繁体字_/qq可爱网名繁体字_/2011qq长网名_/2011腾讯网名_/2011qq女生网名_/2011qq超长网名_/腾讯qq英文网名_/腾讯qq2011网名_/腾讯qq可爱网名_/腾讯qq女网名_/腾讯qq搞笑网名_/qq网名_/qq非主流女生网名_/qq非主流男生网名_/2011qq非主流网名_/qq非主流英文网名_/qq非主流长网名_/非主流qq网名大全_/qq空间网名_/2011qq个性情侣网名_/qq个性情侣网名一对_/qq炫舞个性情侣网名_/qq个性情侣长网名_/qq个性情侣英文网名_/qq飞车个性情侣网名_/qq最新个性情侣网名_/qq个性伤感情侣网名_/qq个性情侣网名大全_/个性的qq情侣网名_/qq非主流情侣长网名_/非主流情侣网名_/非主流个性情侣网名_/2011非主流情侣网名_/非主流伤感情侣网名_/非主流情侣网名大全_/最新非主流情侣网名_/非主流情侣网名长的_/非主流超长情侣网名_/非主流幸福情侣网名_/qq飞车情侣网名大全_/qq情侣长网名大全_/qq英文情侣网名大全_/qq炫舞情侣网名大全_/qq空间情侣网名大全_/qq超长情侣网名大全_/qq12字情侣网名大全_/情侣网名大全_/2011qq超长情侣网名_/2011qq幸福情侣网名_/2011qq最新情侣网名_/2011qq情侣长网名_/
复制代码
58.txt内容为-
- ︸°莫名的想妳︸°无意的念你|/▃_欲念▃_执念|/毒情畸情|/′为你饮剧毒′为你毁容颜|/情绪信念|/♦彼时彼刻的爱╮♦此时此刻的爱╮|/舍不得把你抓紧舍不得把你放开|/用你的时候ゝ千般温柔弃你的时候ゝ毫不留情|/我不要思念你我要紧挨着你|/一种相思゛两处闲愁゛|/两情若是久长时゛又岂在朝朝暮暮゛|/以身相许易以生相许难|/因为你是你因此我是我|/∞浮华霸黎つ∞尘世棟京つ|/゛成成尛京京的夫゛京京尛成成的妻|/╰硪是你的梁山伯╰硪是你的祝英台|/女人大声点男人快一点|/╰呐个男人的谎言╰呐个女人的谎言|/■硪爱你爱的无可救药□硪爱你爱的死心塌地|/╰最疼爱的人爱硪多少╰疼愛硪的人沒有多少|/失声╰呐喊触动每个音符闭眼╰聆听世界每个角度|/╰狠黄狠暴力╰狠纯狠暧昧|/Sou1相依ゞSou1相偎ゞ|/个性网的签名只是为了纪念你|/妳會莣記莪袔莪莋丕菿|/╭尛帥"╭爱帥帥"|/1加1等于2|/◇安分小男人"◇安分小女人"|/那誰我不在爱你那莪筭イ+厸|/最好的幸福是把一个人记住最累的辛苦是想你想到哭|/#我爱她.不容质疑.#我爱他.无须怀疑.|/何必强颜欢笑っ何必最做多情っ|/╰无可奈何花落去╰似曾相识燕归来m1n3珍惜你#m1n3珍重你#|/向往平淡√不甘平凡√|/谢谢你掌心温暖到我心原谅你看你一脸孩子气|/爱情好像流沙把我掩埋ひ爱情好像流沙把我掩埋ひ|/男人不坏女人不爱女人不爱男人不坏|/心没有安置ㄟ只好在流浪ㄟ|/我留在原点ㄲ始终很留恋ㄲ|/杂/老头杂/老太|/比起脑海离心脏更近的人比起相聚离分别更近的人|/╰﹀小黄牛╰﹀小狗狗|/我爱你.*e你爱我.*e|/永远葽快樂記得葽快樂|/悲痛″starˇ幸福″overˇ|/牽佐手っ吥離牽佑手っ吥棄|/左手边牵你右手边牵你|/溺水三千我只取一瓢饮|/派大星离不开海绵宝宝海綿寶寶離不開派大星|/许你一世柔情给你一生宠溺|/你这个优雅的废物※你这个冷漠的怪兽※|/始终如一相伴于你苦痛悲始终如一相随于你喜乐美|/曲终人散▍谁去谁留-繁华落尽▍谁痛谁伤-|/﹌花花世界-﹌何必当真-|/海绵宝宝为什么哭?因为派大星背叛了他|/一个如此霸道的男人い一个极端高傲的女人い|/青花瓷-兰亭序-|/曾经╮现在╮|/注定陪你到最后注定跟你到最后|/我是小人物你是大人物|/别拿山炮不当人er别拿二逼不吊事er|/涐爱你真真切切涐恋你刻骨铭心|/下雨了╮说抱歉天晴了╮说再见|/开心关心|/宠辱不惊坐看庭前花开花落╰我带你私奔╰带我去私奔|/愛愛愛愛愛╮貓花花花花花╮貓|/〆老男人〆老女人|/你是我内心的一首歌ゞ我是你内心的一首歌ゞ|/你腐蚀了我的全部你瓦解了我的所有|/喂等我嗯等你|/╰心疼你的心疼╰’疼爱你的疼爱|/丧心狂失心疯|/闻得到的气息触不到的温柔|/两情若是久长时#又岂在朝朝暮暮#|/纳爱斯▍清新有他°纳爱斯▍清新有她°|/◆◇:誰都吥媞誰の誰◇◆:呮侑莪媞莪の莪|/那過去の迴憶迴憶の那過去|/我离君天涯#君隔我海角#|/情人总分分和和我们却越爱越深|/
复制代码
谢谢大家
[ 本帖最后由 danny123 于 2011-2-12 21:57 编辑 ]
作者: broly 时间: 2011-2-12 21:00
for循环中tokens(列)的极限数是31
作者: danny123 时间: 2011-2-12 21:06
原帖由 broly 于 2011-2-12 21:00 发表
for循环中tokens(列)的极限数是31
请问有没有什么方法修改,不用tokens改用别的行不行?麻烦了
作者: broly 时间: 2011-2-12 21:21 标题: 回复 3楼 的帖子
这样吗?- @echo off
- for %%a in (gj.txt 58.txt) do (
- set n=0
- for /f "tokens=1,* delims=/" %%i in (%%a) do call :sub %%i %%j
- )
- pause
- exit
-
- :sub
- set /a n+=1
- >>cp%n%.txt echo %1
- if not "%2"=="" (
- for /f "tokens=1,* delims=/" %%i in ("%2") do (call :sub %%i %%j)
- )
复制代码
作者: danny123 时间: 2011-2-12 21:32
本帖最后由 pcl_test 于 2016-11-18 17:18 编辑
回复 4# broly
用您这个运行了一下,好像不行,没有文件生成,您再帮忙看看?
作者: cutebe 时间: 2011-2-12 21:34
- :换分隔符后用一般FOR来处理
- @echo off
- setlocal enabledelayedexpansion
- FOR /F "delims=" %%i in (gj.txt,58.txt) do (
- set "L=%%i"
- set NL=!L:/=;!
- FOR %%j in (!NL!) do (
- set/a n+=1
- >cp!n!.txt echo=%%j
- )
- )
复制代码
作者: danny123 时间: 2011-2-12 21:38
本帖最后由 pcl_test 于 2016-11-18 17:18 编辑
回复 6# cutebe
运行了一下,您这个gj.txt和58.txt里面的内容没有串在一起,是分开的,能帮忙看看吗
[ 本帖最后由 danny123 于 2011-2-12 22:06 编辑 ]
作者: broly 时间: 2011-2-12 21:41 标题: 回复 7楼 的帖子
测试没有问题。
你的文本命名之类的有没有弄错?
作者: danny123 时间: 2011-2-12 22:03
好像是58.txt里面的各种符号造成的,全中文就没问题
作者: CrLf 时间: 2011-2-12 22:08 标题: 回复 8楼 的帖子
- @echo off&setlocal enabledelayedexpansion
- for %%f in (gj.txt 58.txt) do (
- set n=
- for /f "delims=" %%a in (%%f) do (
- set tmp=%%a&set tmp=!tmp:/=" "!
- for %%i in ("!tmp!") do set /a "n+=1"&set .%%f!n!=%%~i
- )
- )
- for /l %%a in (1 1 %n%) do (
- echo !.gj.txt%%a!
- echo !.58.txt%%a!
- )>>%%a.txt
- pause
- exit
复制代码
[ 本帖最后由 zm900612 于 2011-2-12 22:15 编辑 ]
作者: danny123 时间: 2011-2-12 22:17
原帖由 zm900612 于 2011-2-12 22:08 发表
@echo off&setlocal enabledelayedexpansion
for %%f in (gj.txt 58.txt) do (
set n=
for /f "delims=" %%a in (%%f) do (
set tmp=%%a&set tmp=!tmp:/=" "!
for %%i in ("!tmp!") do set /a ...
谢谢,您的代码运行后文字左右多了分号",生成没有问题,我真实的文档里面是6000多条,就无法生成了,谢谢这位大哥
作者: broly 时间: 2011-2-12 22:45
修改了一下6楼的代码- @echo off
- setlocal enabledelayedexpansion
- for %%a in (gj.txt 58.txt) do (
- set n=0
- FOR /F "delims=" %%i in (%%a) do (
- set "L=%%i"
- set NL=!L:/=;!
- FOR %%j in (!NL!) do (
- set/a n+=1
- >>cp!n!.txt echo=%%j
- )
- )
- )
复制代码
作者: cutebe 时间: 2011-2-12 23:21
- :不处理一些特殊字符
- @echo off
- setlocal enabledelayedexpansion
- FOR /F "delims=" %%i in (gj.txt,58.txt) do (
- set "L=%%i"
- set NL=!L:/=;!
- set n=
- FOR %%j in (!NL!) do (
- set/a n+=1
- >>cp!n!.txt echo=%%j
- )
- )
- pause
复制代码
作者: CrLf 时间: 2011-2-12 23:50
10楼代码已修正...
作者: danny123 时间: 2011-2-13 16:17 标题: 请求帮忙修改一下代码,还是tokens显示31条的问题
昨天在论坛求助,大家都踊跃帮忙,十分感谢,具体见
批处理为何只能生成31个文件?
但存在一个问题,因为我的文档内容太多,每个都在100K左右,运行昨天各位提供的代码就无法生成文件了,现在这里有一个代码,每生成完一个文件后需要按任意键才可以继续生成,但仍然有 tokens 31 次的限制,请求大家再帮我参考一下,-
- @echo off
- set /a n=0
- :loop
- set /a n+=1
- FOR /F "tokens=%n% delims=/" %%i in (gj.txt,58.txt) do @echo %%i >> cp%n%.txt
- pause
- goto :loop
复制代码
因为附件有100多K,所以传在网盘,请大家有空帮忙看看
gj.txt 地址 http://u.115.com/file/f752225630
58.txt 地址 http://u.115.com/file/f7fe67bbf6
谢谢
作者: CrLf 时间: 2011-2-13 16:45
100KB=102400B
如果都在同一行的话,这个是不是太大了...变量的极限容量才8192,所以我弃权...
作者: danny123 时间: 2011-2-13 17:00
有没有方法改成不受限制,批处理一点都不懂,不好意思诸位
作者: CrLf 时间: 2011-2-13 17:16
不知道for /f "tokens=1*"...语句的参数有没有限制极限长度,如果没限制的话估计用临时文件可以做到,不过效率就不用指望了
还有一个思路是fsutil+for切割文件,但是无论效率还是通用性上都差强人意
不用第三方命令的话,别的思路暂时没有了...等待高人出现
[ 本帖最后由 zm900612 于 2011-2-13 17:17 编辑 ]
作者: hanyeguxing 时间: 2011-2-13 17:31
使用fr或sed替换/为换行
然后用for 处理
作者: cutebe 时间: 2011-2-13 19:05
是阿,使用用第三方SED 4.14吧(注意备份你的两个TXT文本)
http://bbs.bathome.net/thread-1114-1-1.html- @echo off
- cd/d %~dp0
- (echo sed -i "s/\//\n/g" gj.txt
- echo sed -i "s/\//\n/g" 58.txt
- echo exit)>N.BAT
- start N.BAT
- echo 按任意键开始生成文件
- pause>nul
- setlocal enabledelayedexpansion
- for %%a in (gj.txt;58.txt)do (
- set n=
- FOR /F "delims=" %%i in (%%a) do (
- set/a n+=1
- >>cp!n!.txt echo=%%i
- )
- )
- del N.BAT
- pause
复制代码
[ 本帖最后由 cutebe 于 2011-2-13 19:06 编辑 ]
作者: Batcher 时间: 2011-2-13 19:18 标题: 回复 15楼 的帖子
过期了,无法从网盘下载。
作者: CUer 时间: 2011-2-13 19:29
- gawk -F/ "NR==FNR{for(i=1;i<=NF;i++)a[i]=$i}NR>FNR{for(i=1;i<=NF;i++)print $i\"\n\"a[i] >\"cp\"i\".txt\"}" 58.txt gj.txt
复制代码
作者: danny123 时间: 2011-2-13 23:42
原帖由 Batcher 于 2011-2-13 19:18 发表
过期了,无法从网盘下载。
谢谢,已经续了
作者: danny123 时间: 2011-2-13 23:44
测试了一下,好像不行,谢谢您
作者: broly 时间: 2011-2-13 23:49
原帖由 danny123 于 2011-2-13 23:42 发表
谢谢,已经续了
还是过期。。。
用VBS可以不。。。
作者: broly 时间: 2011-2-14 00:14
原帖由 broly 于 2011-2-13 23:49 发表
还是过期。。。
用VBS可以不。。。
-
- '//保存此文件为 untitled.vbs
- '//跟那两个文本放在一起,然后运行。。。
- Dim fso,f,ary1,ary2,intMax,intMin,i,strText
- Set fso=CreateObject("Scripting.FileSystemObject")
- Set f=fso.OpenTextFile(fso.GetFolder(".") & "\gj.txt",1)
- ary1=Split(f.ReadAll,"/",-1) : f.Close
- Set f=fso.OpenTextFile(fso.GetFolder(".") & "\58.txt",1)
- ary2=Split(f.ReadAll,"/",-1) : f.Close
- If UBound(ary1) > UBound(ary2) Then
- intMax=UBound(ary1)
- intMin=UBound(ary2)
- Else
- intMax=UBound(ary2)
- intMin=UBound(ary1)
- End If
- For i=1 To intMin
- strText=ary1(i) & vbCrLf & ary2(i)
- Set f=fso.CreateTextFile("cp"&i&".txt",True)
- f.Write strText
- f.Close
- Next
- For i=intMin To intMax
- If UBound(ary1)=intMax Then
- strText=ary1(i)
- Else
- strText=ary2(i)
- End If
- Set f=fso.CreateTextFile("cp"&i&".txt",True)
- f.Write strText
- f.Close
- Next
- MsgBox "完成!"
- Set fso=Nothing:Set f=Nothing
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |