[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
笨方法也想了很久很久
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3. for %%j in (%%i) do (
  4. set /a n+=4
  5. set "str=%%j !str!")
  6. set "str1=!str: =!"
  7. call :lp !str!
  8. set str=)
  9. echo.&echo Total: %n%&echo.
  10. for /f "tokens=1,2 delims=.=" %%i in ('set .^|sort /+4 /r') do (
  11. if %%j gtr 1 (echo %%i = %%j&set str=flag) else (
  12. if not defined str echo 千字文沒有重字
  13. pause&exit))
  14. :lp
  15. if "%1" neq "" echo %1&shift
  16. set /a ".%str1:~,1%+=1"
  17. set "str1=%str1:~1%"
  18. if defined str1 goto lp
复制代码
我是NO.1 呀﹗不過.......@echo是在菜鳥比賽中....>.<

TOP

低效无脑流
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (qianzhiwen.txt) do (
  3. set a=%%i
  4. set a=!a: =!
  5. set b=!b!!a!
  6. )
  7. for /l %%i in (1 1 10000) do (
  8. set e=!b!
  9. if "!e!"=="" (goto b)
  10. set c=!e:~,1!
  11. set #%%i=!c!
  12. set /a n+=1
  13. set e=!e:~1!
  14. )
  15. :b
  16. echo there are !n! words in txt
  17. pause
  18. for /l %%i in (1 1 !n!) do (
  19. echo %%1
  20. pause
  21. call if not "%%b:!#%%i!=%%"=="!b:~1!" (set/a m+=1&&set s!m!=!#%%i!&&set b=!b:~1!))
  22. if not defined m (echo there are no repeating words in txt) else (
  23. echo there are !m! repeating words in txt , there are :
  24. for /l %%i in (1 1 !m!) do (echo !s%%i!)
  25. )
  26. pause
  27. set d=!n!
  28. :c
  29. if "!d!"=="0" (goto :eof&pause)
  30. set/a d3=!d!-3
  31. set/a d2=!d!-2
  32. set/a d1=!d!-1
  33. echo !#%d3%!!#%d2%!!#%d1%!!#%d%!
  34. set/a d=!d!-4
  35. goto c
复制代码

TOP

本帖最后由 mxxcgzxxx 于 2011-7-14 22:07 编辑

在原基础上提高重字效率
  1. @ECHO OFF
  2. setlocal EnableDelayedExpansion
  3. set a=0
  4. for /f "tokens=1-6 delims= " %%1 in (千字文.txt) do (
  5.             set /a a+=1 & set "a!a!=%%1"
  6.             set /a a+=1 & set "a!a!=%%2"
  7.             set /a a+=1 & set "a!a!=%%3"
  8.             set /a a+=1 & set "a!a!=%%4"
  9.             set /a a+=1 & set "a!a!=%%5"
  10.             set /a a+=1 & set "a!a!=%%6"
  11.             )
  12. set /a b=%a%-6
  13. for /l %%i in (%b%,1,%a%) do if "!a%%i!"==""  set /a a-=1
  14. set /a b=%a%*4
  15. echo 《千字文》篇幅总计有%b%字;
  16. pause>nul
  17. set c=
  18. for /l %%i in (%a%,-1,1) do echo,!a%%i! &set c=!c!!a%%i!
  19. pause>nul
  20. set /a b-=1
  21. set f=
  22. for /l %%1 in (1,1,%b%) do (
  23.    set "a=!c:~0,1!"
  24.    set "c=!c:~1!"
  25.    for %%i in (!a!) do set "d=!c:%%i=!"
  26.    if "!d!" neq "!c!" set "f=!f! !a!"
  27.    )
  28. echo  有以下重字:%f%
  29. pause>nul
复制代码
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

本帖最后由 mxxcgzxxx 于 2011-7-14 22:08 编辑

看到楼上的
  1. for /l %%a in (0 1 %n%)do Set/a "_!$:~%%a,1!+=1"
  2. Set _|find/v "=1"
复制代码
发现自己的思路是好窄!
但有趣的是我的机子在重复运行后会出错全都变成2了怎么回事?

原来是自己多复制了一次
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

本帖最后由 plp626 于 2011-6-2 19:35 编辑

好早看到这个题,以为是给新手的。
今天看到几个老鸟的代码有些意外。
版主是在考大家的词频统计算法(联盟的精华帖那个),怎么没人用啊:
  1. @ECHO off&setlocal EnableDelayedExpansion
  2. Set $=&Set n=-1&for %%a in (
  3. 天地玄黄 宇宙洪荒 日月盈昃 辰宿列张 寒来暑往 秋收冬藏
  4. 闰馀成岁 律吕调阳 云腾致雨 露结为霜 金生丽水 玉出昆冈
  5. 剑号巨阙 珠称夜光 果珍李柰 菜重芥姜 海咸河淡 鳞潜羽翔
  6. 龙师火帝 鸟官人皇 始制文字 乃服衣裳 推位让国 有虞陶唐
  7. 吊民伐罪 周发殷汤 坐朝问道 垂拱平章 爱育黎首 臣伏戎羌
  8. 遐迩一体 率宾归王 鸣凤在竹 白驹食场 化被草木 赖及万方
  9. 盖此身发 四大五常 恭惟鞠养 岂敢毁伤 女慕贞洁 男效才良
  10. 知过必改 得能莫忘 罔谈彼短 靡恃己长 信使可复 器欲难量
  11. 墨悲丝染 诗赞羔羊 景行维贤 克念作圣 德建名立 形端表正
  12. 空谷传声 虚堂习听 祸因恶积 福缘善庆 尺璧非宝 寸阴是竞
  13. 资父事君 曰严与敬 孝当竭力 忠则尽命 临深履薄 夙兴温凊
  14. 似兰斯馨 如松之盛 川流不息 渊澄取映 容止若思 言辞安定
  15. 笃初诚美 慎终宜令 荣业所基 籍甚无竟 学优登仕 摄职从政
  16. 存以甘棠 去而益咏 乐殊贵贱 礼别尊卑 上和下睦 夫唱妇随
  17. 外受傅训 入奉母仪 诸姑伯叔 犹子比儿 孔怀兄弟 同气连枝
  18. 交友投分 切磨箴规 仁慈隐恻 造次弗离 节义廉退 颠沛匪亏
  19. 性静情逸 心动神疲 守真志满 逐物意移 坚持雅操 好爵自縻
  20. 都邑华夏 东西二京 背邙面洛 浮渭据泾 宫殿盘郁 楼观飞惊
  21. 图写禽兽 画彩仙灵 丙舍傍启 甲帐对楹 肆筵设席 鼓瑟吹笙
  22. 升阶纳陛 弁转疑星 右通广内 左达承明 既集坟典 亦聚群英
  23. 杜稿钟隶 漆书壁经 府罗将相 路侠槐卿 户封八县 家给千兵
  24. 高冠陪辇 驱毂振缨 世禄侈富 车驾肥轻 策功茂实 勒碑刻铭
  25. 磻溪伊尹 佐时阿衡 奄宅曲阜 微旦孰营 桓公匡合 济弱扶倾
  26. 绮回汉惠 说感武丁 俊乂密勿 多士寔宁 晋楚更霸 赵魏困横
  27. 假途灭虢 践土会盟 何遵约法 韩弊烦刑 起翦颇牧 用军最精
  28. 宣威沙漠 驰誉丹青 九州禹迹 百郡秦并 岳宗泰岱 禅主云亭
  29. 雁门紫塞 鸡田赤城 昆池碣石 巨野洞庭 旷远绵邈 岩岫杳冥
  30. 治本于农 务资稼穑 俶载南亩 我艺黍稷 税熟贡新 劝赏黜陟
  31. 孟轲敦素 史鱼秉直 庶几中庸 劳谦谨敕 聆音察理 鉴貌辨色
  32. 贻厥嘉猷 勉其祗植 省躬讥诫 宠增抗极 殆辱近耻 林皋幸即
  33. 两疏见机 解组谁逼 索居闲处 沉默寂寥 求古寻论 散虑逍遥
  34. 欣奏累遣 戚谢欢招 渠荷的历 园莽抽条 枇杷晚翠 梧桐蚤凋
  35. 陈根委翳 落叶飘摇 游鹍独运 凌摩绛霄 耽读玩市 寓目囊箱
  36. 易輶攸畏 属耳垣墙 具膳餐饭 适口充肠 饱饫烹宰 饥厌糟糠
  37. 亲戚故旧 老少异粮 妾御绩纺 侍巾帷房 纨扇圆絜 银烛炜煌
  38. 昼眠夕寐 蓝笋象床 弦歌酒宴 接杯举觞 矫手顿足 悦豫且康
  39. 嫡后嗣续 祭祀烝尝 稽颡再拜 悚惧恐惶 笺牒简要 顾答审详
  40. 骸垢想浴 执热愿凉 驴骡犊特 骇跃超骧 诛斩贼盗 捕获叛亡
  41. 布射僚丸 嵇琴阮啸 恬笔伦纸 钧巧任钓 释纷利俗 竝皆佳妙
  42. 毛施淑姿 工颦妍笑 年矢每催 曦晖朗曜 璇玑悬斡 晦魄环照
  43. 指薪修祜 永绥吉劭 矩步引领 俯仰廊庙 束带矜庄 徘徊瞻眺
  44. 孤陋寡闻 愚蒙等诮 谓语助者 焉哉乎也
  45. )do Set $=%%a^&echo/!$!&set/a n+=4
  46. ECHO %$%
  47. ECHO 总字数:%n%+1
  48. Set "$=!$:&echo/=!"
  49. for /l %%a in (0 1 %n%)do Set/a "_!$:~%%a,1!+=1"
  50. ECHO 重复字:
  51. Set _|find/v "=1"
  52. pause
复制代码
更新一下(修改关于字数n的计算):
  1. @ECHO off&setlocal EnableDelayedExpansion
  2. Set $=&Set n=&for %%a in (
  3. rem ----- 复制千字文 粘贴到这里 -------
  4. )do Set $=%%a^&echo/!$!&set/a n+=4
  5. ECHO 总字数:%n%
  6. Set "#=!$:&echo/=!"
  7. for /l %%a in (%n% -1 1)do Set/a "_!#:~-%%a,1!+=1"
  8. ECHO 重复字:
  9. Set _|find /v "=1"
  10. set/p=按任意键开始逆序输出
  11. ECHO %$%
  12. pause
复制代码
1

评分人数

    • zm900612: 除了那个999+1,算法思路堪称完美PB + 19 技术 + 1

TOP

本帖最后由 523066680 于 2011-6-1 13:09 编辑

第一题关于统计字符个数因为前人做过这么多折腾了,我就不折腾了,绕过。找最简单的,第二条。
以前有做过类似,我的目的是搞得结果人性化一点,代码没有优势
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set line=0
  4. for /f "tokens=*" %%a in (src2.txt) do (
  5. set /a line+=1
  6. call :next "%%a" !line!
  7. )
  8. pause
  9. exit
  10. :next
  11. set str=%~1
  12. set /a x=0,xb=1
  13. :lp
  14. set get=!str:~%x%,1!
  15. if "%get%"==" " (set /a x+=1 &goto :lp)
  16. if defined SPEC_%get% (
  17. echo    !SPEC_%get%:%get%=_%get%_!
  18. echo PK 行!line! !str:%get%=_%get%_!
  19. echo ,
  20. ) else (
  21. set SPEC_!str:~%x%,1!=行!line! !str!
  22. )
  23. set /a x+=1
  24. if not "!str:~%x%!"=="" (goto :lp) else (goto :eof)
复制代码
处理结果
  1.    行5 吊民伐罪 周[发]殷汤 坐朝问道 垂拱平章 爱育黎首 臣伏戎羌
  2. PK 行7 盖此身[发] 四大五常 恭惟鞠养 岂敢毁伤 女慕贞洁 男效才良
  3. ,
  4.    行2 闰馀成岁 律吕调阳 [云]腾致雨 露结为霜 金生丽水 玉出昆冈
  5. PK 行26 宣威沙漠 驰誉丹青 九州禹迹 百郡秦并 岳宗泰岱 禅主[云]亭
  6. ,
  7.    行2 闰馀成岁 律吕调阳 云腾致雨 露结为霜 金生丽水 玉出[昆]冈
  8. PK 行27 雁门紫塞 鸡田赤城 [昆]池碣石 巨野洞庭 旷远绵邈 岩岫杳冥
  9. ,
  10.    行3 剑号[巨]阙 珠称夜光 果珍李柰 菜重芥姜 海咸河淡 鳞潜羽翔
  11. PK 行27 雁门紫塞 鸡田赤城 昆池碣石 [巨]野洞庭 旷远绵邈 岩岫杳冥
  12. ,
  13.    行11 [资]父事君 曰严与敬 孝当竭力 忠则尽命 临深履薄 夙兴温凊
  14. PK 行28 治本于农 务[资]稼穑 俶载南亩 我艺黍稷 税熟贡新 劝赏黜陟
  15. ,
  16.    行32 欣奏累遣 [戚]谢欢招 渠荷的历 园莽抽条 枇杷晚翠 梧桐蚤凋
  17. PK 行35 亲[戚]故旧 老少异粮 妾御绩纺 侍巾帷房 纨扇圆絜 银烛炜煌
  18. ,
复制代码
哟呵,下划线改成方括号比较直观。
1

评分人数

TOP

本帖最后由 zm900612 于 2011-6-1 13:32 编辑

11# 523066680

还有别的方法,变量替换就至少有两三种

另外,大家别看第一题简单,其实方法不少,找到文本的规律就可以写出有针对性的思路,迥异的思路至少有三种

TOP

完整的:
  1. Dim vbstr, fso, vbout, out, vbk, judge
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. vbstr = Replace(fso.OpenTextFile("a.txt").ReadAll(), vbCrLf, "")
  4. judge = "没有"
  5. For Each out In Split(vbstr, Chr(32))
  6.   vbout = out & vbCrLf & vbout
  7.   For i = 1 To Len(out)
  8.     If InStr(vbk, Mid(out, i, 1)) = 0 Then
  9.       vbk = vbk & Mid(out, i, 1)
  10.       Else
  11.       judge = "有"
  12.     End If
  13.   Next
  14. Next
  15. MsgBox "千字文总字数为:" & Len(Replace(vbstr, Chr(32), "")) & "字," & judge & "重复"
  16. MsgBox vbout, , "倒序输出"
  17. Set fso = Nothing
复制代码
1

评分人数

***共同提高***

TOP

那个, 检查重复字的是不是用 那个文字做变量名,然后用if defined ... 来判断是否重复的。

TOP

先给个计算字数的vbs:
  1. Dim vbstr, fso
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. vbstr = fso.OpenTextFile("a.txt").ReadAll()
  4. MsgBox "千字文总字数为:" & Len(Replace(Replace(vbstr, Chr(32), ""), vbCrLf, ""))
  5. Set fso = Nothing
复制代码
1

评分人数

    • zm900612: 怎么说呢...不是纯批,但确实有效果PB + 3
***共同提高***

TOP

本帖最后由 neorobin 于 2011-5-31 23:49 编辑

计算字串长度, 没有比此处
http://www.bathome.net/viewthrea ... muid=20015#pid74946
更好的代码, 就不写了
  1. @echo off & setlocal enableDelayedExpansion
  2. for /f "delims=:" %%n in ('findstr /n /b /e :text "%~0"') do set jump=%%n
  3. for /f "skip=%jump% usebackq delims=" %%l in ("%~0") do set text=!text!%%l
  4. set text=!text: =!
  5. set kiloChr=!text!$
  6. for /l %%i in (999 -1 0) do (
  7.   set tmp=!kiloChr!
  8.   for %%c in (!kiloChr:~%%i^,1!) do (
  9.     set kiloChr=!kiloChr:%%c=!
  10.     if #!kiloChr:~%%i! neq #$ (
  11.       set kiloChr=!tmp:~0,-2!$
  12.       set duplicate=!duplicate!%%c
  13.     )
  14.   )
  15. )
  16. set duplicate
  17. pause
  18. for /l %%p in (12 16 1004) do (
  19.   set /a qMin=%%p-12
  20.   for /l %%q in (%%p -4 !qMin!) do echo,!text:~%%q,4!
  21. )
  22. pause
  23. exit
  24. :text
  25. 天地玄黄 宇宙洪荒 日月盈昃 辰宿列张 寒来暑往 秋收冬藏
  26. 闰馀成岁 律吕调阳 云腾致雨 露结为霜 金生丽水 玉出昆冈
  27. 剑号巨阙 珠称夜光 果珍李柰 菜重芥姜 海咸河淡 鳞潜羽翔
  28. 龙师火帝 鸟官人皇 始制文字 乃服衣裳 推位让国 有虞陶唐
  29. 吊民伐罪 周发殷汤 坐朝问道 垂拱平章 爱育黎首 臣伏戎羌
  30. 遐迩一体 率宾归王 鸣凤在竹 白驹食场 化被草木 赖及万方
  31. 盖此身发 四大五常 恭惟鞠养 岂敢毁伤 女慕贞洁 男效才良
  32. 知过必改 得能莫忘 罔谈彼短 靡恃己长 信使可复 器欲难量
  33. 墨悲丝染 诗赞羔羊 景行维贤 克念作圣 德建名立 形端表正
  34. 空谷传声 虚堂习听 祸因恶积 福缘善庆 尺璧非宝 寸阴是竞
  35. 资父事君 曰严与敬 孝当竭力 忠则尽命 临深履薄 夙兴温凊
  36. 似兰斯馨 如松之盛 川流不息 渊澄取映 容止若思 言辞安定
  37. 笃初诚美 慎终宜令 荣业所基 籍甚无竟 学优登仕 摄职从政
  38. 存以甘棠 去而益咏 乐殊贵贱 礼别尊卑 上和下睦 夫唱妇随
  39. 外受傅训 入奉母仪 诸姑伯叔 犹子比儿 孔怀兄弟 同气连枝
  40. 交友投分 切磨箴规 仁慈隐恻 造次弗离 节义廉退 颠沛匪亏
  41. 性静情逸 心动神疲 守真志满 逐物意移 坚持雅操 好爵自縻
  42. 都邑华夏 东西二京 背邙面洛 浮渭据泾 宫殿盘郁 楼观飞惊
  43. 图写禽兽 画彩仙灵 丙舍傍启 甲帐对楹 肆筵设席 鼓瑟吹笙
  44. 升阶纳陛 弁转疑星 右通广内 左达承明 既集坟典 亦聚群英
  45. 杜稿钟隶 漆书壁经 府罗将相 路侠槐卿 户封八县 家给千兵
  46. 高冠陪辇 驱毂振缨 世禄侈富 车驾肥轻 策功茂实 勒碑刻铭
  47. 磻溪伊尹 佐时阿衡 奄宅曲阜 微旦孰营 桓公匡合 济弱扶倾
  48. 绮回汉惠 说感武丁 俊乂密勿 多士寔宁 晋楚更霸 赵魏困横
  49. 假途灭虢 践土会盟 何遵约法 韩弊烦刑 起翦颇牧 用军最精
  50. 宣威沙漠 驰誉丹青 九州禹迹 百郡秦并 岳宗泰岱 禅主云亭
  51. 雁门紫塞 鸡田赤城 昆池碣石 巨野洞庭 旷远绵邈 岩岫杳冥
  52. 治本于农 务资稼穑 俶载南亩 我艺黍稷 税熟贡新 劝赏黜陟
  53. 孟轲敦素 史鱼秉直 庶几中庸 劳谦谨敕 聆音察理 鉴貌辨色
  54. 贻厥嘉猷 勉其祗植 省躬讥诫 宠增抗极 殆辱近耻 林皋幸即
  55. 两疏见机 解组谁逼 索居闲处 沉默寂寥 求古寻论 散虑逍遥
  56. 欣奏累遣 戚谢欢招 渠荷的历 园莽抽条 枇杷晚翠 梧桐蚤凋
  57. 陈根委翳 落叶飘摇 游鹍独运 凌摩绛霄 耽读玩市 寓目囊箱
  58. 易輶攸畏 属耳垣墙 具膳餐饭 适口充肠 饱饫烹宰 饥厌糟糠
  59. 亲戚故旧 老少异粮 妾御绩纺 侍巾帷房 纨扇圆絜 银烛炜煌
  60. 昼眠夕寐 蓝笋象床 弦歌酒宴 接杯举觞 矫手顿足 悦豫且康
  61. 嫡后嗣续 祭祀烝尝 稽颡再拜 悚惧恐惶 笺牒简要 顾答审详
  62. 骸垢想浴 执热愿凉 驴骡犊特 骇跃超骧 诛斩贼盗 捕获叛亡
  63. 布射僚丸 嵇琴阮啸 恬笔伦纸 钧巧任钓 释纷利俗 竝皆佳妙
  64. 毛施淑姿 工颦妍笑 年矢每催 曦晖朗曜 璇玑悬斡 晦魄环照
  65. 指薪修祜 永绥吉劭 矩步引领 俯仰廊庙 束带矜庄 徘徊瞻眺
  66. 孤陋寡闻 愚蒙等诮 谓语助者 焉哉乎也
复制代码
1

评分人数

    • zm900612: 代码严谨高效,非常工整,两题满分PB + 10

TOP

我的重字较对那里花的时间有点多!
1

评分人数

    • zm900612: 补上少加的分。思路很活,希望保持!PB + 12
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

6# mxxcgzxxx


思路很好,找到了文本的规律所在,这是高效的前提。
不过代码还可以进一步简化。

TOP

本帖最后由 mxxcgzxxx 于 2011-5-31 22:50 编辑

答个1,3,2题
  1. @ECHO OFF
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. set a=0
  4. for /f "tokens=1-6 delims= " %%1 in (千字文.txt) do (
  5.             set /a a+=1 & set "a!a!=%%1"
  6.             set /a a+=1 & set "a!a!=%%2"
  7.             set /a a+=1 & set "a!a!=%%3"
  8.             set /a a+=1 & set "a!a!=%%4"
  9.             set /a a+=1 & set "a!a!=%%5"
  10.             set /a a+=1 & set "a!a!=%%6"
  11.             )
  12. set /a b=%a%-6
  13. for /l %%i in (%b%,1,%a%) do if "!a%%i!"==""  set /a a-=1
  14. set /a b=%a%*4
  15. echo 《千字文》篇幅总计有%b%字;
  16. pause>nul
  17. set c=
  18. for /l %%i in (%a%,-1,1) do echo,!a%%i! &set c=!c!!a%%i!
  19. pause>nul
  20. set /a d=b-1
  21. set f=
  22. for /l %%i in (1,1,%d%) do (
  23.          set /a e=%%i+1
  24.          for /l %%1 in (!e!,1,%b%) do if "!c:~%%i,1!"=="!c:~%%1,1!" set "f=!f! !c:~%%i,1!"
  25.          )
  26. echo  有以下重字:%f%
  27. pause>nul
复制代码
1

评分人数

    • zm900612: 思路很好,另辟蹊径PB + 5 技术 + 1
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

3# Demon


哈哈,这倒是,检查了下原来是我自己的代码错了,感谢提醒!

TOP

返回列表