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

最近空时间多,来凑个热闹,希望能拿个第三名吧!
所有代码在win7下测试通过。
有什么问题还望Batcher指点。
帖子代码的显示稍微窄了点儿,长一点的句子显示出来不整齐。
总共才300kb,结果附件不能大于50kb,不得不压缩成7个包... ...
1、
  1. @echo off
  2. call :rd ".\测试文件夹"&exit
  3. :rd
  4. for /f "delims=" %%a in ('dir/a-d/b %1 2^>nul') do if not "%%a"=="" del "%~1\%%a" /f
  5. for /f "delims=" %%a in ('dir/ad/b %1 2^>nul') do if not "%%a"=="" call :rd "%~1\%%a"
  6. rd %1 /q 2>nul
复制代码
2、
  1. @echo off
  2. for /f "skip=4 delims=" %%i in ('net user') do (
  3. if not "%%i"=="命令成功完成。" (
  4.     (for %%j in (%%i) do echo %%j)>User_List.txt
  5. ))
  6. (findstr /v /g:User_List.txt DBatHome_User_List.txt)>Gone_Users.txt
  7. (findstr /v /g:DBatHome_User_List.txt User_List.txt)>New_Users.txt
复制代码
3、
  1. @echo off
  2. set str=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%%^^^&*+
  3. setlocal enabledelayedexpansion
  4. for /l %%a in (1001,1,1100) do (
  5.     call :get_rnd
  6.     set password=%%a!rnd!
  7.     set username=%%a&set username=!username:~1!&set username=BatHome!username!
  8.     echo net user !username! !password! /add
  9. )
  10. pause&exit
  11. :get_rnd 生成四位带一个大写、一个小写字母、一个数字、一个特殊字符的不重复字符串
  12. set rnd=
  13. set /a l=!random!%%26,u=!random!%%26+26,n=!random!%%10+52,t=!random!%%10+62
  14. for %%a in (!l!,!u!,!n!,!t!) do (
  15.     set rnd=!rnd!!str:~%%a,1!
  16. )
  17. if not defined !rnd! (set !rnd!=yes
  18. ) else (call :get_rnd)
复制代码
4、
  1. @echo off&title DateToSecs函数 BY Batcher Else BY wankoilz
  2. set "len=for /f "tokens=1-2" %%1 in ("$") do (set ##=!%%1!&set %%2=&(for %%a in (4096,2048,1024,512,256,128,64,32,16,8,4,2,1) do (if not "!%%1:~%%a,1!"=="" (set/a %%2+=%%a&set %%1=!%%1:~%%a!)))&(if not "!%%1!"=="" set/a %%2+=1)&set %%1=!##!)"
  3. setlocal enabledelayedexpansion
  4. echo MemoryInfo:
  5. call :Show_MemoryInfo
  6. echo;&echo DiskInfo(Wait a moment):
  7. call :Show_DiskInfo
  8. echo;&echo SystemRunningTimeDiff:
  9. call :Show_SystemRunningTimeDiff
  10. echo;&pause&goto :eof
  11. :Show_MemoryInfo
  12. for %%a in (物理内存总量 可用的物理内存) do (
  13.     set /a n+=1
  14.     for /f "tokens=2" %%b in ('systeminfo ^| findstr "%%a"') do (
  15.         set mem!n!=%%b
  16.     )
  17. )
  18. set rest=!mem2:^,=!&set total=!mem1:^,=!
  19. set/a used=!total!-!rest!
  20. set used=!used!0000
  21. set/a percent=!used!/!total!
  22. set percent=0000!percent!
  23. set percent_int=!percent:~0,-2!&set percent_float=!percent:~-2!
  24. call :trim percent_int !percent_int!
  25. set percent=!percent_int!.!percent_float!%
  26. set total=!total!0000
  27. set/a total=!total!/1024
  28. set total=0000!total!
  29. set int_total=!total:~0,-4!&set float_total=!total:~-4!
  30. call :trim int_total !int_total!
  31. set total_GB=!int_total!.!float_total!
  32. echo     总内存:!total_GB!GB
  33. echo 内存使用率:!percent!
  34. goto :eof
  35. :Show_DiskInfo
  36. for /f "skip=1 tokens=1-3" %%a in ('wmic logicaldisk get name^,size^,freespace') do (
  37.     if not "%%c"=="" (
  38.         set quotient=&call :division %%c 1073741824
  39.         set size=!quotient! GB
  40.         set quotient=&call :division %%a %%c
  41.         set quotient=!quotient:^.=!&set quotient=!quotient:~0,5!
  42.         call :trim quotient !quotient!
  43.         set/a used_per=10000-!quotient!
  44.         set used_per=0000!used_per!&set used_per=!used_per:~-4!
  45.         set used_per_int=!used_per:~0,2!&set used_per_float=!used_per:~2!
  46.         call :trim used_per_int !used_per_int!
  47.         set used_per=!used_per_int!.!used_per_float!
  48.         for /l %%a in (1,1,13) do set size= !size!
  49.         echo %%b盘容量!size:~-13!   使用率!used_per!%
  50.     )
  51. )
  52. goto :eof
  53. :Show_SystemRunningTimeDiff
  54. for /f "tokens=2-3" %%a in ('net statistics workstation^|findstr "统计数据开始于"') do (
  55.     set StartTime=%%a %%b
  56. )
  57. for /f "tokens=1" %%a in ("%date%") do set date=%%a
  58. set EndTime=%date% %time:~0,-3%
  59. echo 最近一次开机时间:%starttime%
  60. echo         当前时间:%endtime%
  61. call :DateDiff %StartTime% %EndTime%
  62. echo   系统已运行时间:%Y%年%D%日%H%时%M%分%S%秒
  63. goto :eof
  64. :DateDiff !StartTime! !EndTime!
  65. set StartTime=%StartTime:-= %
  66. set StartTime=%StartTime:/= %
  67. set StartTime=%StartTime::= %
  68. set EndTime=%EndTime:-= %
  69. set EndTime=%EndTime:/= %
  70. set EndTime=%EndTime::= %
  71. call :DateToSecs %StartTime% StartSecs
  72. call :DateToSecs %EndTime% EndSecs
  73. set /a DiffSecs=EndSecs-StartSecs
  74. set DiffSecs=%DiffSecs:-= %
  75. set /a Y=DiffSecs/31536000
  76. set /a D=(DiffSecs%%31536000)/86400
  77. set /a H=(DiffSecs%%86400)/3600
  78. set /a M=(DiffSecs%%3600)/60
  79. set /a S=DiffSecs%%60
  80. goto :eof
  81. :DateToSecs %yy% %mm% %dd% %hh% %nn% %ss% secs
  82. setlocal ENABLEEXTENSIONS
  83. set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5&set ss=%6
  84. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  85. set /a dd=100%dd%%%100,mm=100%mm%%%100
  86. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  87. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  88. if 1%hh% LSS 20 set hh=0%hh%
  89. if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
  90. if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
  91. if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
  92. set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100
  93. set /a j=j*86400+hh*3600+nn*60+ss
  94. endlocal&set %7=%j%&goto :eof
  95. :division
  96. setlocal
  97. set dividend=%1&set divisor=%2
  98. %len:$=dividend length_dividend%
  99. %len:$=divisor length_divisor%
  100. set add=4
  101. for /l %%a in (1,1,!add!) do set dividend=!dividend!0
  102. set/a length_dividend+=!add!
  103. set/a up=!length_dividend!-1
  104. for /l %%a in (0,1,!up!) do (
  105.     set minuend=!minuend!!dividend:~%%a,1!
  106.     call :trim minuend !minuend!
  107.     call :compare !minuend! !divisor!
  108.     if "!flag_com!"=="geq" (
  109.         set quo=&call :subtraction !minuend! !divisor!
  110.         set quotient=!quotient!!quo!
  111.         set minuend=!D_value!
  112.     ) else (
  113.         set quotient=!quotient!0
  114.     )
  115. )
  116. set int=!quotient:~0,-%add%!&set float=!quotient:~-%add%!
  117. call :trim int !int!
  118. set quotient=!int!.!float!
  119. endlocal&set quotient=%quotient%&goto :eof
  120. :subtraction  被减数  减数
  121. setlocal&set a=%1&set b=%2&set/a quo+=1
  122. %len:$=a length_a%
  123. set b=0!b!&set b=!b:~-%length_a%!
  124. set/a p=!length_a!-1
  125. for /l %%a in (0,1,!p!) do (
  126.     set arrA_%%a=!a:~%%a,1!
  127.     set arrB_%%a=!b:~%%a,1!
  128. )
  129. for /l %%a in (!p!,-1,0) do (
  130.     if !arrA_%%a! geq !arrB_%%a! (
  131.         set/a dif=!arrA_%%a!-!arrB_%%a!&set diff=!dif!!diff!
  132.     ) else (
  133.         set/a borrow=%%a-1
  134.         set/a arrA_!borrow!-=1
  135.         set/a dif=!arrA_%%a!+10-!arrB_%%a!
  136.         set diff=!dif!!diff!
  137.     )
  138. )
  139. if "!diff:~0,1!"=="0" call :trim diff !diff!
  140. call :compare !diff! %2
  141. if "!flag_com!"=="geq" (
  142. endlocal&set quo=%quo%&set diffr=%diff%&call :subtraction !diffr! %2
  143. ) else (
  144. endlocal&set quo=%quo%&set D_value=%diff%&goto :eof
  145. )
  146. :compare  被减数  减数(除数)
  147. setlocal&set a=%1&set b=%2
  148. %len:$=a length_a%
  149. %len:$=b length_b%
  150. set/a l=!length_a!-1
  151. if !length_a! gtr !length_b! (endlocal&set flag_com=geq&goto :eof)
  152. if !length_a! lss !length_b! (endlocal&set flag_com=lss&goto :eof)
  153. if !length_a! equ !length_b! (
  154.     if "!a!"=="!b!" (
  155.         endlocal&set flag_com=geq&goto :eof
  156.     ) else (
  157.         for /l %%a in (0,1,!l!) do (
  158.                 if "!a:~%%a,1!" gtr "!b:~%%a,1!" (endlocal&set flag_com=geq&goto :eof)
  159.                 if "!a:~%%a,1!" lss "!b:~%%a,1!" (endlocal&set flag_com=lss&goto :eof)
  160.         )
  161.     )
  162. )
  163. :trim
  164. setlocal
  165. set a=%2
  166. if "!a:~0,1!"=="0" (if not "!a!"=="0" (endlocal&set %1=%a:~1%&call :trim %1 !%1!))
复制代码
5、
  1. @echo off
  2. Rem 增量备份就是加了个/d
  3. if "%date:~-2%"=="周日" (
  4.     xcopy /e/h/r/y/k/o/f/exclude:filter.txt "D:\www.bathome" "D:\bbs.bathome"
  5. ) else (
  6.     xcopy /e/h/r/y/k/o/f/d/exclude:filter.txt "D:\www.bathome" "D:\bbs.bathome"
  7. )
  8. pause>nul
复制代码
6、
  1. @echo off&Rem 因为精确位数很容易修改,所以最后一位没有进行四舍五入
  2. set "len=for /f "tokens=1-2" %%1 in ("$") do (set ##=!%%1!&set %%2=&(for %%a in (4096,2048,1024,512,256,128,64,32,16,8,4,2,1) do (if not "!%%1:~%%a,1!"=="" (set/a %%2+=%%a&set %%1=!%%1:~%%a!)))&(if not "!%%1!"=="" set/a %%2+=1)&set %%1=!##!)"
  3. setlocal enabledelayedexpansion&title 任意位正整数除法 BY wankoilz
  4. set/p x=输入被除数:
  5. set/p y=输入除数:
  6. echo 计算中...
  7. call :division !x! !y!
  8. cls&echo 被除数:!x!&echo 除数:!y!&echo 商:!quotient!
  9. echo;&pause&exit
  10. :division
  11. setlocal
  12. set dividend=%1&set divisor=%2
  13. %len:$=dividend length_dividend%
  14. %len:$=divisor length_divisor%
  15. set add=100
  16. for /l %%a in (1,1,!add!) do set dividend=!dividend!0
  17. set/a length_dividend+=!add!
  18. set/a up=!length_dividend!-1
  19. for /l %%a in (0,1,!up!) do (
  20.     set/p=^><nul
  21.     set minuend=!minuend!!dividend:~%%a,1!
  22.     call :trim minuend !minuend!
  23.     call :compare !minuend! !divisor!
  24.     if "!flag_com!"=="geq" (
  25.         set quo=&call :subtraction !minuend! !divisor!
  26.         set quotient=!quotient!!quo!
  27.         set minuend=!D_value!
  28.     ) else (
  29.         set quotient=!quotient!0
  30.     )
  31. )
  32. set int=!quotient:~0,-%add%!&set float=!quotient:~-%add%!
  33. call :trim int !int!
  34. set quotient=!int!.!float!
  35. endlocal&set quotient=%quotient%&goto :eof
  36. :subtraction  被减数  减数
  37. setlocal&set a=%1&set b=%2&set/a quo+=1
  38. %len:$=a length_a%
  39. set b=0!b!&set b=!b:~-%length_a%!
  40. set/a p=!length_a!-1
  41. for /l %%a in (0,1,!p!) do (
  42.     set arrA_%%a=!a:~%%a,1!
  43.     set arrB_%%a=!b:~%%a,1!
  44. )
  45. for /l %%a in (!p!,-1,0) do (
  46.     if !arrA_%%a! geq !arrB_%%a! (
  47.         set/a dif=!arrA_%%a!-!arrB_%%a!&set diff=!dif!!diff!
  48.     ) else (
  49.         set/a borrow=%%a-1
  50.         set/a arrA_!borrow!-=1
  51.         set/a dif=!arrA_%%a!+10-!arrB_%%a!
  52.         set diff=!dif!!diff!
  53.     )
  54. )
  55. if "!diff:~0,1!"=="0" call :trim diff !diff!
  56. call :compare !diff! %2
  57. if "!flag_com!"=="geq" (
  58. endlocal&set quo=%quo%&set diffr=%diff%&call :subtraction !diffr! %2
  59. ) else (
  60. endlocal&set quo=%quo%&set D_value=%diff%&goto :eof
  61. )
  62. :compare  被减数  减数(除数)
  63. setlocal&set a=%1&set b=%2
  64. %len:$=a length_a%
  65. %len:$=b length_b%
  66. set/a l=!length_a!-1
  67. if !length_a! gtr !length_b! (endlocal&set flag_com=geq&goto :eof)
  68. if !length_a! lss !length_b! (endlocal&set flag_com=lss&goto :eof)
  69. if !length_a! equ !length_b! (
  70.     if "!a!"=="!b!" (
  71.         endlocal&set flag_com=geq&goto :eof
  72.     ) else (
  73.         for /l %%a in (0,1,!l!) do (
  74.                 if "!a:~%%a,1!" gtr "!b:~%%a,1!" (endlocal&set flag_com=geq&goto :eof)
  75.                 if "!a:~%%a,1!" lss "!b:~%%a,1!" (endlocal&set flag_com=lss&goto :eof)
  76.         )
  77.     )
  78. )
  79. :trim
  80. setlocal
  81. set a=%2
  82. if "!a:~0,1!"=="0" (if not "!a!"=="0" (endlocal&set %1=%a:~1%&call :trim %1 !%1!))
复制代码
7、
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p url=请输入系列壁纸的网址:
  3. Rem wget http://www.zhuoku.com/zhuomianbizhi/star-starcn/20130729110511.htm
  4. wget !url!
  5. set Lf=^
  6. for %%a in ("!url!") do (set filename=%%~nxa&set dirname=%%~na)
  7. md !dirname! 2>nul
  8. for /f "delims=" %%a in ('findstr "src=.*http.*img.zhuoku.com.*jpg" !filename!') do (
  9.     set "str=%%a"
  10.     for %%b in ("!Lf!") do set "str=!str:img src=%%b!"
  11.     for /f "delims=" %%c in ('set str^| findstr "http.*img.zhuoku.com.*jpg"') do (
  12.         for /f %%d in (%%c) do (
  13.             set "url=%%d"
  14.             set "url=!url:~2,-1!"
  15.             set "url=!url:img=bizhi!"
  16.             set "url=!url:/thumbs=!"
  17.             set "url=!url:tn_=!"
  18.             wget !url!
  19.             for %%e in ("!url!") do move %%~nxe !dirname!\
  20.         )
  21.     )
  22. )
  23. del "!filename!" /f
  24. cls&echo 下载完毕!
  25. pause>nul
复制代码
8、
  1. @echo off&echo; 2>nul 3>nul
  2. set "cmd1=for /f "delims=" %%x in ("!str:~-1!") do set x_danwei=!%%~x!"
  3. set "cmd2=for /f "delims=" %%x in ("!str:~0,-1!") do set n_danwei=!%%~x!"
  4. setlocal enabledelayedexpansion
  5. set 壹=1&set 贰=2&set 叁=3&set 肆=4&set 伍=5
  6. set 陆=6&set 柒=7&set 捌=8&set 玖=9
  7. set 万=1&set 仟=1000&set 佰=100
  8. set 拾=10&set 圆=1&set 角=10&set 分=1
  9. for /f %%a in (a.txt) do (
  10.     set str=%%a&set str=!str:整=!&set str=!str:零=!
  11.     for %%b in (万_wan 仟_qian 佰_bai 拾_shi 圆_yuan 角_jiao 分_fen) do (
  12.         for /f "delims=_ tokens=1,2" %%c in ("%%b") do call :decompose %%c %%d
  13.     )
  14.     set str=!wan!
  15.     for %%c in (仟_q 佰_b 拾_s 万_g) do (
  16.         for /f "delims=_ tokens=1-2" %%d in ("%%c") do (
  17.              call :decompose %%d %%e
  18.     ))      
  19.     for %%c in (q b s g) do (
  20.         set str=!%%c!
  21.         %cmd1%
  22.         %cmd2%
  23.         set/a sum+=!n_danwei!*!x_danwei!
  24.     )
  25.     set/a sum=!sum!*10000
  26.     for %%c in (qian bai shi yuan) do (
  27.         set str=!%%c!
  28.         %cmd1%
  29.         %cmd2%
  30.         set/a sum+=!n_danwei!*!x_danwei!
  31.     )
  32.     for %%c in (jiao fen) do (
  33.         set str=!%%c!
  34.         %cmd1%
  35.         %cmd2%
  36.         set/a float+=!n_danwei!*!x_danwei!
  37.     )
  38.     set float=00!float!&set float=!float:~-2!
  39.     set sum=0000000000!sum!!float!&set sum=!sum:~-10!
  40.     set sort_!sum!=%%a
  41.     for %%c in (wan qian bai shi yuan jiao fen) do set %%c=
  42.     set sum=&set float=
  43. )
  44. echo 升序:&echo;
  45. for /f "delims== tokens=2" %%a in ('set sort') do echo %%a
  46. pause>nul
  47. :decompose
  48. set t=!str:*%1=!&if "!t!"=="" (set %2=!str!&goto :eof)
  49. set %2=!str:%t%=!& if "!%2!"=="" goto :eof
  50. call set str=%%str:!%2!=%%
复制代码
9、
  1. @echo off&setlocal enabledelayedexpansion&echo; 2>nul 3>nul
  2. Rem 要查F盘改 ".\测试文件夹" 为 "F:"
  3. echo 查找中...
  4. md tmp123
  5. call :loop ".\测试文件夹"
  6. for /f "delims=" %%a in ('dir/b tmp123') do (set/a n+=1&set "arr_!n!=%%a")
  7. set/a u=!n!-1
  8. for /l %%a in (1,1,!u!) do (
  9.     set/a low=%%a+1,up=!n!
  10.     for /l %%b in (!low!,1,!up!) do (
  11.         fc "tmp123\!arr_%%a!" "tmp123\!arr_%%b!" | findstr "找不到差异" >nul&&set "f_!arr_%%a!=!arr_%%b!"
  12.     )
  13. )
  14. cls&echo 存在重复情况的目录:&echo;
  15. for /f "delims=_= tokens=2,3" %%a in ('set f_') do (
  16.     set "s=%%a"&set "i=%%b"
  17.     set "s=!s:$=:!"&set "i=!i:$=:!"
  18.     set "s=!s:#=\!"&set "i=!i:#=\!"
  19.     echo !s! = !i!
  20. )
  21. rd tmp123 /s/q
  22. pause
  23. goto :eof
  24. :loop
  25. set "fn=%~1"&set fn=!fn::=$!&set fn=!fn:\=#!
  26. (for /f "delims=" %%a in ('dir/a-d/b "%~1"') do echo %%a)>"tmp123\!fn!"
  27. for /d %%a in ("%~1\*") do call :loop "%%a"
复制代码
10、
  1. @echo off&setlocal enabledelayedexpansion
  2. Rem 目录
  3. (
  4. echo ^<html^>^<body^>
  5. for /f "delims=" %%a in ('findstr/v "^图[0-9]*\.[0-9]*$" 时间简史.txt') do (
  6.     set "s=%%a"
  7.     if "!s!"=="时间简史 目录" set flag_mulu=true
  8.     if defined flag_mulu (
  9.         for /l %%x in (1,1,4) do set "s=&nbsp!s!"
  10.         for /f "tokens=1 delims=  " %%x in ("!s!") do (
  11.             set "t=%%x"&if "!t:~20,1!!t:~-1!"=="第章" set "s=<br>!s!"
  12.         )
  13.         set "s=!s!<br>"
  14.     echo !s!
  15. ))
  16. echo ^<br^>^<br^>
  17. )>时间简史.htm
  18. set flag_mulu=
  19. Rem 正文
  20. (for /f "delims=" %%a in ('findstr/v "^图[0-9]*\.[0-9]*$" 时间简史.txt') do (
  21.     set "s=%%a"
  22.     if "!s!"=="时间简史 目录" set flag_mulu=true
  23.     if not defined flag_mulu (
  24.         for /l %%x in (1,1,4) do set "s=&nbsp!s!"
  25.         for /f "tokens=1 delims=  " %%x in ("!s!") do (
  26.             set "t=%%x"&if "!t:~20,1!!t:~-1!"=="第章" set "s=<font size="5" color="blue">!s!</font>"
  27.         )
  28.         set "s=!s!<br><br>"
  29.     echo !s!
  30. ))
  31. echo ^</body^>^</html^>
  32. )>>时间简史.htm
  33. echo OK&pause
复制代码






附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

怎么没动静了……

TOP

本帖最后由 wankoilz 于 2013-9-1 13:20 编辑

回复 12# Batcher
了解,感谢回复!
看了别人的代码才发现第6题是“任意数”除法,我写的是“任意位正整数”除法... ...

TOP

感谢站长,感谢评委!

TOP

返回列表