[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 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

本帖最后由 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

低效无脑流
  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

笨方法也想了很久很久
  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
  2. for /f "tokens=1-6" %%i in (千字文.txt) do call set words=%%words%%%%i%%j%%k%%l%%m%%n&call set wordsCopy=%%words%%
  3. echo %words%>tempTxt.txt
  4. for %%p in (tempTxt.txt) do set /a number=(%%~zp-2)/2&call echo 1.该文共计%%number%%个汉字。
  5. pause>nul
  6. echo 2.检查是否有重复的字
  7. set bool=no
  8. :loop
  9. set word=%words:~0,1%
  10. set words=囧%words:~1%囧
  11. for /f "delims=%word% tokens=1,2" %%a in ("%words%") do if "%%b" neq "" echo 发现重复的汉字:%word%。&set bool=yes
  12. for /f "delims=囧" %%p in ("%words%") do set words=%%p
  13. if "%words%" neq "囧囧" goto loop
  14. if "%bool%"=="no" echo 没有重复的汉子。
  15. pause>nul
  16. echo 3.倒序输出
  17. set /a group=%number%/4
  18. for /l %%k in (1,1,%group%) do call echo %%wordsCopy:~-4%%&call set wordsCopy=%%wordsCopy:~0,-4%%
  19. echo 干完活啦!&pause>nul
复制代码

TOP

我来也,powershell库丰富,我还是那个论点,学一年等于学bat5年,学一年等于学vbs3年。
这些题,都是powershell菜鸟题。

第一题:
把千字文读入字符串,然后unicode编码,-----这是负责,一般的做法,做了这一步后,中文,英文,乱码,空格啥的,都算一个字符。字符串自带长度属性,就是千字文的字符数,然后减去空格数量即可。


第二题
powershell 有 sort-object,具有排序去重功能。可以对数组对象去重,可以对行去重,当然了,这道题其实就是考核行去重。
。net 或者说powershell,的字符串类,有tochararray()方法。
用了这个方法后,“天地玄黄”就变成了 “天,地,玄,黄”即字符串变数组了。然后再去重,得出结果。
把千字文读入字符串,然后变成单个字符数组,然后再去重,然后和没去重前比较,得出结果。


第三题
多种解法,这里说说我的解法。
还把千字文读入字符串,然后以空格为分隔符,切割字符串,变成n个字串数组,数组第一个单位的内容为“天地玄黄”。然后按照 4321,8765,这样的顺序输出数组元素即可。

写出来的代码都极其简单,期待我群中菜鸟来作,敬请期待。。。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

我来也,powershell库丰富,我还是那个论点,学一年等于学bat5年,学一年等于学vbs3年。
这些题,都是powe ...
PowerShell 发表于 2014-5-12 22:52



   擦咧,原来Powershell要学一年? 让那些一个月学会其他语言的会员情何以堪?
Press Any Key To Continue...

TOP

本帖最后由 shelluserwlb 于 2014-11-10 07:41 编辑
  1. @echo off
  2. color 9e
  3. setlocal EnableDelayedExpansion
  4. set /a num=0
  5. for /f "tokens=1-6" %%i in (千字文.txt) do (
  6.     set /a num+=1 & set str!num!=%%i
  7.     set /a num+=1 & set str!num!=%%j
  8.     set /a num+=1 & set str!num!=%%k
  9.     set /a num+=1 & set str!num!=%%l
  10.     set /a num+=1 & set str!num!=%%m
  11.     set /a num+=1 & set str!num!=%%n
  12. )
  13. set /a a=%num%-6
  14. for /l %%i in (%a%,1,%num%) do if defined str%%i set /a a=%%i
  15. set /a total= a * 4
  16. echo 《千字文》共有汉字字数:%total%个
  17. set str=
  18. for /l %%i in (%a%,-1,1) do (
  19.     set str=!str!!str%%i:~0,1!
  20.     set str=!str!!str%%i:~1,1!
  21.     set str=!str!!str%%i:~2,1!
  22.     set str=!str!!str%%i:~3,1!
  23.     echo !str%%i!
  24. )
  25. echo.
  26. set dup=
  27. for /l %%i in (0,1,%total%) do (
  28.     set ch=!str:~%%i,1!
  29.     if defined str[!ch!] set dup=!dup! !ch!
  30.     set str[!ch!]=!ch!
  31. )
  32. echo 简体字版《千字文》中重复的字有:!dup!
  33. endlocal
  34. echo.& pause
复制代码

TOP

新手,第二题不会。想了多久没想出来。第一题:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :qu
  4. for /f "tokens=1-6 delims= " %%a in (F:\1.txt) do (
  5.        set var=%%a&call :jq&set var=%%b&call :jq&set var=%%c&call :jq&set var=%%d&call :jq&set var=%%e&call :jq&set var=%%f&call :jq)
  6. echo 一共有%js%字
  7. goto end
  8. :jq
  9. if not "%var%"=="" (set d1=%var:~-4,1%&if not "!d1!"==" " (set /a js+=1)) else (goto :eof)
  10. if not "%var%"=="" (set d2=%var:~-3,1%&if not "!d2!"==" " (set /a js+=1)) else (goto :eof)
  11. if not "%var%"=="" (set d3=%var:~-2,1%&if not "!d3!"==" " (set /a js+=1)) else (goto :eof)
  12. if not "%var%"=="" (set d4=%var:~-1,1%&if not "!d1!"==" " (set /a js+=1)&goto :eof) else (goto :eof)
  13. :end
  14. pause>nul
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in (千字文.txt) do (
  4. for %%b in (%%a) do set /p=%%b<nul
  5. ))>temp.txt
  6. for /f "skip=4 tokens=3 delims= " %%c in ('dir temp.txt') do (
  7. set byte=%%c
  8. set /a num=!byte:,=!/2
  9. echo;千字文.txt中共有!num!个汉字&pause>nul
  10. )
复制代码
哈哈,就题解题,第一题可以这样做,请求【加分鼓励】

TOP

高手在民间!!

TOP

表示看不懂的路过,这个VBS还是BAT

TOP

回复 2# Demon


    运行结果1002,应该是1000才对呀

TOP

@echo off
setlocal EnableDelayedExpansion
set m=0
for /f "delims=" %%a in (千字文.txt) do (
    set x=%%a
    call :next !x: =!
)
echo 千字文共有!m!字
pause

:next
set "var=%~1"
set n=0

:loop
call set str=%%var:~!n!,1%%
if "%str%"=="" goto :eof
set /a n+=1,m+=1
goto loop

TOP

第二题、第三题、第一题:
@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (千字文.txt) do (
    for %%b in (%%a) do (
       set var=%%b
       for /l %%c in (0,1,3) do (
         set /a #!var:~%%c,1!+=1
        )   
     )
)
rem set #>>2.txt
  for /f "tokens=1,2 delims=#=" %%a in ('set #') do (
    if %%b gtr 1 echo 重复字:%%a 出现次数:%%b
)
echo:
echo:

for /f "tokens=1-6 delims= " %%a in (千字文.txt) do (
echo %%f
echo %%e
echo %%d
echo %%c
echo %%b
echo %%a
)
echo:
echo:
set m=0
for /f "delims=" %%a in (千字文.txt) do (
    set x=%%a
    call :next !x: =!
)
echo 千字文共有!m!字

:next
set "var=%~1"
set n=0

:loop
call set str=%%var:~!n!,1%%
if "%str%"=="" goto :eof
set /a n+=1,m+=1
goto loop

echo:
echo:

pause

TOP

返回列表