返回列表 发帖

[其他] 2013年度批处理之家BAT编程比赛

用户ID排名奖励发奖
apang1赠送价值200元的礼品2013-09-15 已经发奖
terse2赠送价值100元的礼品2013-09-15 已经发奖
wankoilz3赠送价值100元的礼品2013-09-15 已经发奖
xxpinqz4赠送价值50元的礼品 
5230666805赠送价值50元的礼品 
ShadowFiend6赠送价值50元的礼品2013-09-17 已经发奖

本次比赛只允许使用BAT和XP系统自带的命令行工具,不允许调用 mshta、VBS、PowerShell、JS 等其它脚本和第三方命令行工具(特别注明的个别题目除外)。

参赛时间:
2013-07-19 ~ 2013-08-19

奖项设置:
一等奖:1名,赠送价值200元的礼品
二等奖:2名,赠送价值100元的礼品
三等奖:3名,赠送价值50元的礼品

评分规则:
每个题目30分,其中功能性能占20分,代码规范占10分。
对于总得分相同的用户,以提交答案的时间先后顺序排名。

比赛题目:

1、删除文件夹 D:\BatHome
注意:
(1)该文件夹下面包含文件和子文件夹
(2)可以使用 rd 或 rmdir 命令,但是不允许使用它们的 /s 选项
(3)需要在程序中模拟 rd /s 的递归删除功能

2、检查系统里面是否有非法增加和减少的用户账号
注意:
(1)假设文件 D:\BatHome_User_List.txt 里面保存着所有的合法用户的列表
(2)需要分别找出当前系统里面非法增加的账号和减少的账号

3、批量创建100个系统账号 BatHome001 ~ BatHome100
注意:
(1)每个密码都是一个8位随机字符串,只要包含一个大写字母、一个小写字母、一个数字、一个特殊字符
(2)特殊字符是指除了数字和大小写字母之外的其它字符
(3)不能有重复的密码

4、把系统目前运行的情况记录到文件 D:\BatHome_OS.txt
包括:
(1)物理内存总量是多少(以GB为单位)?目前使用率是多少?
(2)硬盘每个分区的总容量和使用率分别是多少(以GB为单位)?
(3)最近一次开机之后系统已连续运行多长时间(以秒为单位)?

5、把文件夹 D:\www.bathome 下面的文件和子文件夹备份到 D:\bbs.bathome 下面
注意:
(1)备份的时候跳过以下子文件夹:
    logs
    img
(2)备份的时候跳过以下文件:
    *.zip
    *.bak
(3)周一到周六执行增量备份,周日执行完整备份。

6、计算任意两数值的商,要求精确到小数点后100位(没有100位的补足100位)。

7、批量下载壁纸
注意:
(1)下载桌酷网站(http://www.zhuoku.com/)的壁纸,输入一个系列图片的网址,然后自动把这个系列的图片全部下载下来。
(2)能使用常用的几个第三方下载工具

8、将大写的中文数字金额排序
注意:
(1)数值小于一千万元,最小单位为分
(2)中文数字与阿拉伯数字的对应规则参考:http://baike.baidu.com/view/1624026.htm
(3)大写的中文数字金额可以用下表做测试:

陆拾叁万贰仟伍佰肆拾叁圆叁角整
伍万圆整
捌万零肆佰圆伍角叁分
壹佰圆整
贰佰万叁仟贰佰陆拾陆圆零叁分
柒佰柒拾万零捌拾叁圆整
叁万圆肆角肆分
壹圆整

9、把F盘中存在重复情况的目录列举出来
注意:
(1)只要文件夹中的文件列表相同,就认为是重复的文件夹,不需要判断大小、日期、md5等。例如:
F:\PIC\SELECT\ANDROID
    001.jpg
    002.jpg
    003.jpg
    004.jpg
    005.jpg
    LOGO.jpg

F:\Backup\picture\2013-03-03\ANDROID
    001.jpg
    002.jpg
    003.jpg
    004.jpg
    005.jpg
    LOGO.jpg

F:\Rogar\Userfiles\temp\picture
    001.jpg
    002.jpg
    003.jpg
    004.jpg
    005.jpg
    LOGO.jpg

10、将网上下载的txt文本转成html文件以便阅读
注意:
(1)保留txt中的换行格式(在html中加入</br>单标签来实现)
(2)因txt文本中每行前没有空格,请在转化时在行前加入四个半角空格(在html中 为一个半角空格)
(3)遇文本中形如“第一章 我们的宇宙图像”的单行即为段落分隔处,请在前面加入一空行(请考虑尽可能多的章节的书写情况)
(4)抛弃文本中形如“图1.2”的单行(请考虑.前后数值不仅仅为个位的情况)
(5)因为文本可能会含有特殊字符,代码应做特殊字符处理
(6)提示:请注意html文件的基本元素<html><body>标签的加入
(7)附件中的文件仅供测试
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

本帖最后由 terse 于 2013-9-18 19:03 编辑

第一题 不知道符合不
@echo off
del /f /s /q "D:\BatHome" >nul
for /f "delims=" %%i in ('dir /ad /b /s "D:\BatHome" ^|sort /r') do rd "%%i"
rd "D:\BatHome"
pauseCOPY
第二题 比较一下 wmic   wmic 虽然取名方便 对比效率还是不行  所以还是这样处理了
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (D:\BatHome_User_List.txt) do set "$%%a=a"
(for /f "skip=4 delims=" %%i in ('net user') do (
    if defined str (
       for /l %%j in (0 25 50) do (
           for /f "tokens=*" %%a in ("!str:~%%j,25!") do (  
               if not defined $%%~nxa echo %%~nxa
               set #%%~nxa=a
           )
       )
   )
   set "str=%%i"
))>增加的用户.txt
(for /f "tokens=*" %%a in (D:\BatHome_User_List.txt) do if not defined #%%~nxa echo %%~nxa)>减少的用户.txt
pauseCOPY
上面账户名不含空格和特殊字符的 可以简化下
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (D:\BatHome_User_List.txt) do set "$%%a=a"
(for /f "skip=4 delims=" %%i in ('net user') do (
     for %%j in (!str!) do (  
           if not defined $%%~nxj echo %%~nxj
           set #%%~nxj=a
     )
     set "str=%%i"
))>增加的用户.txt
(for /f "tokens=*" %%a in (D:\BatHome_User_List.txt) do if not defined #%%~nxa echo %%~nxa)>减少的用户.txt
pauseCOPY
第三题 偷点懒了 写着写着 代码怎么这么长 总想着在一个FOR里完成  不过效率还好 还应该算随机了
发现还是有重复 现在还没时间修改
换个随机性强点
@echo off
set "code1=0123456789"
set "code2=abcdefghijklmnopqrstuvwxyz"
set "code3=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "code4=`~!@$^&*()-\+|{}[];'<>,.?/"
set /a num=1000
setlocal enabledelayedexpansion
for /L %%i in (0,1,9) do set #%%i=!code1:~%%i,1!&set #####%%i#=1&set "arr=!arr!#####%%i#"
for /L %%i in (2,1,5) do (
set s%%i=
for /L %%j in (1,1,%%i) do set s%%i=1!s%%i!
for /L %%j in (%%i,1,9) do set s%%i=!s%%i!0
set s%%i=!s%%i!
set /a n=10,i=j=1
for /L %%j in (1,1,%%i) do set /a i*=n,j*=%%j,n-=1
set /a lena_%%i=i/j,lenb_%%i=lena_%%i-22
)
for /L %%i in (2,1,5) do (
set var=
for /L %%a in (1,1,!lena_%%i!) do (
         set "s=#####"
         for /l %%b in (0 1 9) do if "!s%%i:~%%b,1!" == "1" set "s=!s!!#%%b!"
         for /f %%b in ("0!s%%i:10= !") do set "t=%%b"
       set "s%%i=!t:0=!!t:1=!1!s%%i:*10=!"
set var=!var!!s:~-6!#
)
for /L %%a in (!lena_%%i!,-1,!lenb_%%i!) do (
set /a "n=!random!%%%%a*7"
for %%b in (!n!) do set "s=!var:~%%b,7!"
for %%b in (!s!) do set var=!var:%%b=!
set "arr=!arr!!s!"
set "!s!=%%i"
)
)
for /L %%i in (102,-1,3) do (
set /a "n=!random!%%%%i*7,num+=1"
for %%j in (!n!) do set "s=!arr:~%%j,7!"
for %%j in (!s!) do set arr=!arr:%%j=!&set n1=!%%j!
        set /a "n2=!random!%%(6-n1)+1,n3=!random!%%(7-n1-n2)+1,n4=8-n1-n2-n3"
set s=!s:#=!
for /L %%a in (2,1,4) do (
for /L %%b in (1,1,!n%%a!) do (
set /a m=!random!%%26,r=!random!%%n1,n1+=1
for /f "tokens=1,2" %%c in ("!m! !r!") do set s=!s:~%%d!!code%%a:~%%c,1!!s:~,%%d!
)
    )
        net user BatHome!num:~1! !s! /add 2>nul
)
pauseCOPY
第四题 这里处理成百分比吗
@echo off&setlocal enabledelayedexpansion
set "wmi=LastBootUpTime,LocalDateTime,TotalVisibleMemorySize,FreePhysicalMemory"
for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
(
for /f "skip=1 tokens=1-4" %%i in ('"wmic os get %wmi%"') do for %%j in (%%j) do (
set "ymd=%%j"
set /a "m=(1!ymd:~4,2!+5)%%12+4,y=!ymd:~,4!-m/14,d=1!ymd:~6,2!-100,h=1!ymd:~8,2!-100"
set /a "s=1461*y/4+153*m/5+d"
set /a "s1=h*3600+(1!ymd:~10,2!-100)*60+1!ymd:~12,2!-100"
set "ymd=%%k"
set /a "m=(1!ymd:~4,2!+5)%%12+4,y=!ymd:~,4!-m/14,d=1!ymd:~6,2!-100,h=1!ymd:~8,2!-100"
set /a "s=(1461*y/4+153*m/5+d-s)*86400-s1,s+=h*3600+(1!ymd:~10,2!-100)*60+1!ymd:~12,2!-100"
set size=%%l
set /a "useb=%%l-%%i,usebp=useb*100/%%l"
for %%a in (size useb) do (
set mod=!%%a!
for /l %%b in (1 1 3) do (
set/a "Qent=mod/1048576,mod=mod%%1048576*10"
set "%%a_g=!%%a_g!!Qent!"
)
)
echo 物理内存: !size_g:~,-2!.!size_g:~-2! [GB]
echo 已使用  : !useb_g:~,-2!.!useb_g:~-2! [GB]
echo 使用率  : !usebp!%%
echo 系统运行时间 : !s!
)
echo 盘符%tab%总容量    %tab%已用空间%tab%可用空间%tab%使用率
set "get=get DeviceID^,FreeSpace^,Size"
for /f "skip=1 tokens=1-3" %%a in ('wmic logicaldisk where "drivetype='3'" !get!') do (
for %%b in (%%b) do (
set $Free=%%b&set "$size=%%c"
for %%i in (size Free) do (
set Qent=&set/a "mod=!$%%i:~,9!%%1048576,%%i=!$%%i:~,9!/1048576"
if "!$%%i:~9!" neq "" (
set "len=!$%%i:~9!876543210"
set /a "len=!len:~8,1!,Qent=!mod!!$%%i:~9!/1048576"
set Qent=00000000!Qent!
for %%j in (!len!) do set Qent=!Qent:~-%%j!
)
set "%%i=!%%i!!Qent!"
)
set /a "Tree=Size-Free,Treep=Tree*100/Size"
for %%i in (Size Tree Free) do (
set $%%i=&set mod=!%%i!
for /l %%j in (1 1 3) do (
set/a "Qent=mod/1024,mod%%=1024"
set mod=!mod!0
set "$%%i=!$%%i!!Qent!"
)
)
echo %%a%tab%!$size:~,-2!.!$size:~-2! [GB]%tab%!$Tree:~,-2!.!$Tree:~-2! [GB]%tab%!$Free:~,-2!.!$Free:~-2! [GB]%tab%!Treep! %%
)
)
)>D:\BatHome_OS.txt
pauseCOPY
第五题 : 此类问题不熟悉 胡凑一个了
今天网友一问题 提醒了我 可能这题遗漏了一个计划任务
@echo off
for /f "skip=1" %%i in ('"wmic path Win32_LocalTime get DayOfWeek"') do for %%j in (%%i) do set "w=%%i"
set /a "m=(w+6)%%7"
set "bak1=D:\bbs.bathome\Week-Bak_%w%"
for /L %%i in (0,1,%m%) do if exist "D:\bbs.bathome\Week-Bak_%%i\" set "bak2=D:\bbs.bathome\Week-Bak_%%i"
if not defined bak2 set w=0
(for %%i in (.zip .bak \logs\ \img\) do echo %%i)>EXCLUDE
setlocal enabledelayedexpansion
if %w% equ 0 (
   rd /s /q "!bak1!" 2>NUL
   xcopy "D:\www.bathome" "!bak1!" /E /H /R /I /Y /EXCLUDE:EXCLUDE >nul
) else (
RD /S /Q "!bak1!" 2>NUL
xcopy "!bak2!" "!bak1!" /E /H /R /I /Y >NUL
(xcopy "D:\www.bathome" "!bak1!" /E /H /R /Y /I /D /EXCLUDE:EXCLUDE)>"!bak1!.log"
)
del EXCLUDE 2>NUL
pauseCOPY
第六题
正好原来有个处理大数的 但不处理小数和负数
修改一下 一般测试过
第7行的 set "d=" 应该为 set "d=0" 唉 初始代码就这样 不知怎的改成空值了
修正
@echo off&setlocal enabledelayedexpansion
REM 被除数 和 除数
set str1=123.01
set str2=-33.47
rem 小数点后位数
set u=100
set "d=0"
for %%i in (str1 str2) do if "!%%i:~,1!" == "-" set /a d+=1
if %d% equ 1 (set "d=-") else set "d="
set l=00000000&for /l %%i in (1 1 7) do set "l=!l!!l!"
set "var=4096 2048 1024 512 256 128 64 32 16 8 4 2 1"
for /l %%i in (1 1 2) do (
set "s%%i=!str%%i:-=!"
set "len%%i=0"
for /F "tokens=2 delims=." %%a in ("!s%%i!") do (
set s=%%a&set len%%i=1
for %%b in (%var%) do if "!S:~%%b!" neq "" set/a len%%i+=%%b&set "S=!S:~%%b!"
)
set s%%i=!s%%i:.=!
)
set /a len=len1-len2
if !len1! gtr !len2! (set "s2=!s2!!l:~,%len:-=%!") else set "s1=!s1!!l:~,%len:-=%!"
for /l %%a in (1 1 2) do (
for /f "tokens=* delims=0" %%i in ("!s%%a!") do set s=%%i&set "s%%a=0%%i"
set len%%a=1
for %%j in (%var%) do if "!S:~%%j!" neq "" set/a len%%a+=%%j&set "S=!S:~%%j!"
)
set sun=!l:~-%len2%,-%len1%!
set /a len=len2+1
if "!s1!" Lss "!s2!" (
set s1=!s1:~1!
if !len1! leq !len2! set sun=!sun!0
set /a Len1-=1
)
set "s1=!s1!!l:~,%u%!"
set "s=!s1:~,%len2%!"
set "i=!l:~,7!!s2!"
set /a Len_i=Len2+7,len1+=u
if %u% leq 0 set "u="
if !len1! geq !len2! (
for /l %%i in (1 1 9) do (
set "T=0"
for /l %%j in (8 8 !Len_i!) do (
set /a "T=1!i:~-%%j,8!*%%i+T"
set Num%%i=!T:~-8!!Num%%i!&set /a "T=!T:~,-8!-%%i"
)
set "Num%%i=!T!!Num%%i!"
set "Num%%i=!l:~,7!!Num%%i:~-%Len%!"
)
for /L %%a in (!len2! 1 !Len1!) do (
set "s=!L!!s!!s1:~%%a,1!"
set "s=!s:~-%Len%!"
if "!s!" geq "!s2!" (
set M=5&set "i=!l:~,7!!s!"
if "!i!" geq "!Num5!"  (
for /l %%i in (6 1 9) do if "!i!" geq "!Num%%i!" set "M=%%i"
) else for /l %%i in (1 1 4) do if "!i!" geq "!Num%%i!" set "M=%%i"
set sun=!sun!!M!&set s=&set T=0
for %%i in (!M!) do (
for /l %%j in (8 8 !Len_i!) do (
set /a "T=3!i:~-%%j,8!-1!Num%%i:~-%%j,8!-!T:~,1!%%2"
set "s=!T:~1!!s!"
)
)
) else set sun=!sun!0
)
if defined u (set "sun=%d%!sun:~,-%u%!.!sun:~-%u%!")else set sun=%d%!sun!
) else if defined u (set "sun=%d%0.!l:~,%u%!") else set sun=%d%0
echo !str1! / !str2!  =  !sun!
pause>nulCOPY
第七题
不确定总系列 还是分类系列 增加个判断吧
@echo off
Rem set /p "url=请输入地址:"
Rem 测试地址1 风景壁纸
Rem set "url=http://www.zhuoku.com/zhuomianbizhi/show/index-1.htm"
Rem 测试地址2 风景壁纸之一  托斯卡纳草原 风光风景宽屏壁纸
set "url=http://www.zhuoku.com/zhuomianbizhi/show-fengjingou/20130731145032.htm"
set "seda=/value=index-/s/.* value=index-([0-9]+).*/\1/p"
set "sedb=s#href=\x22| *class=#\nhttp://www.zhuoku.com#gp"
set "sedc=/\"yema\"/s/.*>\[*([0-9]+)\]*<.*/\1/gp"
set "sedd=/thunder_url/s#.*= *\"(http://.*\.jpg)\";.*#\1#p"
set "wu=http://www.zhuoku.com"
setlocal enabledelayedexpansion
if "!url:/index-=!" neq "!url!" (
for %%i in ("!url!") do set "wurl=!url:%%~nxi=!"
for /f %%j in ('wget -q -O- !url! ^| sed -nr  "!seda!"') do (
(for /l %%j in (1 1 %%j) do echo !wurl:\=/!index-%%j.htm)>url.x
wget -q -O- -i url.x | sed -nr "!sedb!" |sed -nr "s/\.htm\x22$//p" >url.y
)
) else echo !url!|sed -nr "s/\.htm//p" >url.y
(for /f "tokens=*" %%i in (url.y) do (
for /f %%j in ('wget -q -O- "%%i(1).htm" ^| sed -nr "!sedc!"') do (
for /l %%k in (1 1 %%j) do echo %%i(%%k^).htm
)
))>url.x
wget -q -O- -i url.x |sed -nr "!sedd!" >url.y
wget -m -q -nH -np --referer="http://www.zhuoku.com" -i url.y
del url.x url.y
pauseCOPY
第八题 修改下  还是去掉临时文件了 效率相差不大
@echo off&setlocal enabledelayedexpansion
%1(for /f "tokens=2" %%i in ('%~s0 Rem ^|sort') do echo %%i)&pause&exit
set "t=零壹贰叁肆伍陆柒捌玖"
set 仟=10&for %%i in (拾 佰) do set %%i=!仟!&set "仟=!仟!0"
set 分=1&set "角=10"
for /f %%a in (a.txt) do (
        set str=%%a
        for /l %%i in (1 1 9) do (
                for %%j in (!t:~%%i^,1!) do set "str=!str:%%j=%%i!"
        )
        for /f "tokens=1* delims=圆" %%i in ("!str:零=!") do (
if "%%j" neq "" (
set $a=%%i&set "$b=%%j"
) else set $a=0&set "$b=%%i"
)
        for %%j in (角 分) do set "$b=!$b:%%j=*%%j+!"
        set /a $b=!$b!+100,$=0
        if "!$a!" == "!$a:万=!" (set i=1) else set i=10000
for %%i in (!$a:万^= !) do (
               set "$a=%%i"
for %%j in (拾 佰 仟) do set "$a=!$a:%%j=*%%j+!+0"
set /a "$+=(!$a!)*i"
set i=1
        )
        set $=00000000!$!.!$b:~-2!
        echo !$:~-11! %%a
)
COPY
第九题
最终用了 FC 比较 方案
这里取一个文件比较    多几个文件做比较 也许效率看提升点
@echo off
SET PH=f:
dir /s /a-d /o:n %PH% >dir_a.t
(for /f "skip=2 tokens=*" %%i in (dir_a.t) do (
        set "str=%%i"
        setlocal enabledelayedexpansion
        if exist "!str:~,-4!\" (
                for /f "tokens=*" %%j in ("!str:~,-4!") do endlocal&set "files=%%j"
        ) else  endlocal&for /f "tokens=1-3*" %%a in ("%%i") do if "%%b%%d" == "个文件字节" (
                setlocal enabledelayedexpansion
                for /f "tokens=1-3*" %%a in ("%%i") do echo !file!:%%a:!files!
                endlocal
        ) else set "file=%%d"
))>dir_b.t
findstr /ibv ":" dir_b.t|sort >dir_a.t
set /a i=n=1
for /f "tokens=1-2* delims=:" %%a in (dir_a.t) do (
        set "str=%%a:%%b"
        setlocal enabledelayedexpansion
        if /i "!s!" neq "!str!" (
                if !i! gtr 1 set /a n+=1
                set i=1
        ) else set /a "i+=1"
        for /f "tokens=1,2" %%i in ("!n! !i!") do endlocal&set n=%%i&set i=%%j&set _%%i=%%j&set "%%i_%%j=%%c"
        set "s=%%a:%%b"
)
setlocal enabledelayedexpansion
(for /l %%i in (1 1 %N%) do (
        for /l %%a in (1 1 !_%%i!) do (
                for /f "tokens=*" %%m in ("!%%i_%%a!") do (
                        set /a i=%%a+1
                        dir /b /a-d /on "!%%i_%%a!" >dir_a.t
                        for /l %%b in (!i! 1 !_%%i!) do (
                                for /f "tokens=*" %%n in ("!%%i_%%b!") do (
                                        dir /b /a-d /on "!%%i_%%b!" >dir_b.t
fc /c dir_a.t dir_b.t>nul&&(
for /f "tokens=*" %%o in ("!%%i_%%a!") do (
                                                        echo !%%i_%%a!&type dir_a.t&echo;
                                                        set %%i_%%a=
                                                )
                                                echo !%%i_%%b!&type dir_b.t&echo;
                                                set %%i_%%b=
)
                                )
                        )
                )
        )
))>dir_list.txt
del dir_a.t dir_b.t
start "" dir_list.txt
pauseCOPY
findstr 搜索 方案
相对FCf方案来说  FINDSTR 搜索字符有限制外  还有FINDSTR还有字符串搜索问题
用FIND 替换 FINDSTR 可以解决 但效率
@echo off
SET PH=f:
dir /s /a-d /o:n %PH% >dir_a.t
(for /f "skip=2 tokens=*" %%i in (dir_a.t) do (
set "str=%%i"
setlocal enabledelayedexpansion
if exist "!str:~,-4!\" (
for /f "tokens=*" %%j in ("!str:~,-4!") do endlocal&set "files=%%j"
) else  endlocal&for /f "tokens=1-3*" %%a in ("%%i") do if "%%b%%d" == "个文件字节" (
setlocal enabledelayedexpansion
for /f "tokens=1-3*" %%a in ("%%i") do echo !file!:%%a:!files!
endlocal
) else set "file=%%d"
))>dir_b.t
findstr /ibv ":" dir_b.t|sort >dir_a.t
set /a i=n=1
for /f "tokens=1-2* delims=:" %%a in (dir_a.t) do (
set "str=%%a:%%b"
setlocal enabledelayedexpansion
if /i "!s!" neq "!str!" (
if !i! gtr 1 set /a n+=1
set i=1
) else set /a "i+=1"
for /f "tokens=1,2" %%i in ("!n! !i!") do endlocal&set n=%%i&set i=%%j&set _%%i=%%j&set "%%i_%%j=%%c"
set "s=%%a:%%b"
)
setlocal enabledelayedexpansion
(for /l %%i in (1 1 %N%) do (
for /l %%a in (1 1 !_%%i!) do (
for /f "tokens=*" %%m in ("!%%i_%%a!") do (
set /a i=%%a+1
dir /b /a-d "!%%i_%%a!" >dir_a.t
for /l %%b in (!i! 1 !_%%i!) do (
for /f "tokens=*" %%n in ("!%%i_%%b!") do (
dir /b /a-d "!%%i_%%b!" >dir_b.t
findstr /ivxg:dir_a.t dir_b.t>dir_c.t>nul||findstr /ivxg:dir_b.t dir_a.t>nul||(
for /f "tokens=*" %%o in ("!%%i_%%a!") do (
                                                 echo !%%i_%%a!&type dir_a.t&echo;
set %%i_%%a=
)
echo !%%i_%%b!&type dir_b.t&echo;
set %%i_%%b=
)
)
)
)
)
))>dir_list.txt
del dir_a.t dir_b.t
start "" dir_list.txt
pauseCOPY
第九题 增加一个临时文件方案3 如文件夹数量大的情况 增加个临时文件
@echo off
SET PH=f:
dir /s /a-d /o:n %PH% >dir_a.t
(for /f "skip=2 tokens=*" %%i in (dir_a.t) do (
        set "str=%%i"
        setlocal enabledelayedexpansion
        if exist "!str:~,-4!\" (
                for /f "tokens=*" %%j in ("!str:~,-4!") do endlocal&set "files=%%j"
        ) else  endlocal&for /f "tokens=1-3*" %%a in ("%%i") do if "%%b%%d" == "个文件字节" (
                setlocal enabledelayedexpansion
                for /f "tokens=1-3*" %%a in ("%%i") do echo !file!:%%a:!files!
                endlocal
        ) else set "file=%%d"
))>dir_b.t
findstr /inbv ":" dir_b.t >dir_a.t
(for /f "tokens=1-3* delims=:" %%a in (dir_a.t) do (
if not defined $%%a (
dir /b /a-d /on "%%d" >dir_b.t
set flag=a
findstr /ic:":%%b:%%c:" dir_a.t>$
for /f "tokens=1-3* delims=:" %%A in ($) do (
if %%A gtr %%a (
if not defined $%%A (
dir /b /a-d /on "%%D" >dir_c.t
fc /c /L dir_b.t dir_c.t>nul&&(
if defined flag set flag=&echo %%d&type dir_b.t&echo;
echo %%D&type dir_c.t&echo;
set $%%A=a
)
)
)
)
)
))>dir_list.txt
del $ dir_a.t dir_b.t dir_c.t 2>nul
start "" dir_list.txt
pauseCOPY
第十题
@echo off
findstr /ivx "图[0-9]*\.[0-9]*" a.txt>_temp.t
findstr /ivx "图[0-9]*\.[0-9]*、.*图[0-9]*\.[0-9]*" _temp.t>html.txt
set "sp=&nbsp;&nbsp;&nbsp;&nbsp;"
set "br=<br />"
set "ims=一二三四五六七八九十百  "
(findstr /ib "<[^/]" %~s0
for /f "delims=" %%i in ('findstr /in .* html.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
        set "str=!str:*:=!"
if defined str (
for /f "tokens=1,2 delims=%ims%" %%a in ("!str!") do (
if "%%a%%b" == "第章"  (
if "!str:~,2!" == "第章" (
echo;!br!!sp!!str!!br!
) else echo;!sp!!str!!br!
) else echo;!sp!!str!!br!
)
) else echo !br!
endlocal
)
findstr /ib "</" %~s0
)>a.html
del html.txt _temp.t
exit
<html>
<body>
</body>
</html> COPY

TOP

本帖最后由 523066680 于 2013-8-19 19:30 编辑

第一题:
(没有考虑特殊文件夹或者权限限制的情况)

修改时间:2013-08-08
改善问题:1、遇到含有%、! 的符号出错
             2、for /f + 'dir'效率低,改为了for /D
@echo off
set target=x:\bathome
if exist %target% (
    cd /d %target%\
    call :subfolder
    cd ..
    rd %target%
) else (
    echo %target% 目录不存在
)
pause
exit
:subfolder
  echo %cd%
  del *.* /a /f /q
  for /D %%i in (*.*) do (
      cd "%%~fi"
      call :subfolder
      cd ..
      rd "%%~fi"
  )
  goto :eof
  COPY
第三题,
修改时间:2013-07-27
改善问题:1、支持%、! 等字符
             2、减少call,提速
             3、net user 在遇到 " 时需要用\"转义。

每一组出现的次数是随机的(在至少出现一次的基础上),每一组出现的位置是随机的。
@echo off
setlocal enabledelayedexpansion
set t=%time%
set S1=ABCDEFGHIJKLMNOPQRSTUVWXYZ
set S2=abcdefghijklmnopqrstuvwxyz
set S3=0123456789
rem       V    V V V              V    V V
set "S4=~`^!@#$%%^^^&*()_+-={}[]|\:^";'^<^>,.?/"
set /a N1=26,N2=26,N3=10,N4=32
set /a i=0
:LP
    set "Series="
    set "Code="
    rem [1-4]是4个必须的组元素,4以上随机选组
    for /l %%i in (1,1,8) do (
        if %%i leq 4 (
            set /a Who=%%i, R=!random! %% N%%i
        ) else (
            set /a Who=!random! %% 4 + 1
            set /a R=!random! %% N!Who!
        )
        set Code[%%i]=!Who!_!R!
    )
    rem 从数组中随机提取元素,装载到SRand
    rem 根据提取的个数,逐步缩小提取范围
    set "SRand="
    for /l %%a in (8,-1,1) do (
        set /a R=!random! %% %%a + 1
        for %%b in (!R!) do set SRand=!SRand! !Code[%%b]!
        set Code[!R!]=!Code[%%a]!
    )
    if not defined EVER_%SRand: =% (
        set EVER_%SRand: =%=exist
        set /a i+=1
        rem 编号转字符
        for %%n in (%SRand%) do (
            for /f "tokens=1,2 delims=_" %%a in ("%%n") do (
                set Series=!Series!!S%%a:~%%b,1!
            )
        )
        set nnn=00!i!
        set nnn=!nnn:~-3!
        rem 设置密码如果出现双引号, 需要用\进行转义
        rem net user Bathome!nnn! "!Series:"=\"!" /add 1>nul
        echo 编号和密码:!nnn! !Series!
    ) else (
        rem  其实很少重复,走个过场。
        echo 出现重复密码
        goto :LP
    )
    if %i% lss 100 (
        goto :LP
    )
echo %t% %time%
pause
exitCOPY
编号和密码:090 Mb1BN49}
编号和密码:091 i9A8^2DU
编号和密码:092 bm6=:I1V
编号和密码:093 1G+iY2i3
编号和密码:094 nq"s|8rI
编号和密码:095 2[|8SmL1
编号和密码:096 kZf:6ST:
编号和密码:097 W&6?*b8f
编号和密码:098 6&4t_1P2
编号和密码:099 9e^7K>EV
编号和密码:100 C>%Qz1Q4



第八题   很长……
@echo off
setlocal enabledelayedexpansion
set /a n=1, m=10
for %%i in (壹 贰 叁 肆 伍 陆 柒 捌 玖 分 角 圆 拾 佰 仟 万) do (
    if !n! leq 9 (
        set /a C_%%i=n,n+=1
    ) else (
        set /a P_%%i=m,m-=1
    )
)
set /a Code=0, Begin=0
rem 读取文本/调用Deal转换数字
for /f "tokens=*" %%a in ('type %0') do (
    if !Begin! equ 1 (call :Deal %%a)
    if "%%a"=="::Data" (set /a Begin=1)
)
rem 选择排序
for /l %%a in (%Code%,-1,1) do (
    set Ever=0000000000_000
    for /l %%b in (1,1,%%a) do (
       if !Ser[%%b]! gtr !Ever! (
           set Ever=!Ser[%%b]!
           set Num=%%b
       )
    )
    set Ser[!Num!]=!Ser[%%a]!
    set Ser[%%a]=!Ever!
)
for /l %%a in (1,1,%Code%) do (
    for %%b in (!Ser[%%a]!) do echo !SRC_%%b!
)
pause
exit
:Deal
    set Say=%1
    set Ser=0000000000
    set Say=%Say:整=%
    set Say=%Say:零=%
    set /a i=0,Cut=0,Code+=1
    for /l %%a in (0,1,25) do (
        set z=!Say:~-1,1!
        set Say=!Say:~,-1!
        if defined P_!z! (
            set /a Site=P_!z!-Cut
            if "!z!"=="万" (set Cut=4)
        ) else (
            set /a Num=C_!z!,SiteA=Site-1
            for /f "tokens=1,2" %%i in ("!Site! !SiteA!") do (
                set Ser=!Ser:~0,%%j!!Num!!Ser:~%%i!
            )
        )
        if "!Say!"=="" (goto :next)
    )
    :next
    set NNN=000%Code%
    rem NNN后缀用来确保相同的数额能够在排序中保留
    set Ser[%Code%]=%Ser%_!NNN:~-3!
    set SRC_%Ser%_!NNN:~-3!=%1
    goto :eof
::Data
陆拾叁万贰仟伍佰肆拾叁圆叁角整
伍万圆整
捌万零肆佰圆伍角叁分
壹佰圆整
贰佰万叁仟贰佰陆拾陆圆零叁分
柒佰柒拾万零捌拾叁圆整
叁万圆肆角肆分
壹圆整COPY
第九题
最后修改: 8月19日
基本上在遇到含有%%!! () & 符号的文件、文件夹时不会出错。不过效率很低。
如果多个目录相同,比如,A=B=C  可以并排列出。而不是A=B,B=C,A=C分别列出。
::Find the same directory
::     by 523066680
::2013-08-19
@echo off
:init
    set MainDir=%cd%\
    set MainDir=%MainDir:\\=\%
    set text="%MainDir%F_Record.txt"
    set Ra="%MainDir%FileRa.txt"
    set Rb="%MainDir%FileRb.txt"
    type nul>%text%
    set t=%time%
    set /a rept=1
    rem list = 0 输出结果不列出文件列表
    rem list = 1 列出文件数量、大小
    rem list = 2 列出文件列表和数量、大小
    set list=1
    rem confrim = 1 or 0 : 决定是否核对文件大小
    set confirm=1
    echo Current Directory: "%MainDir%"
    if %confirm% equ 0 (
        set "ext="
        set "arg=/b"
        set "filter="
        set filt2="字节"
    ) else (
        set "ext=%%~za"
        set "arg=/w"
        set "filter=|more +5 |find /v " 可用字节""
        set filt2=" 可用字节"
    )
:deal
    for /r "%MainDir%" %%a in (.) do (
        if "%%a"=="%MainDir%%%~nxa\." echo "%%a"
        cd "%%a"
        call :next
    )
    echo 处理结果:
    rem 对搜集的数据汇总输出
    set /a rept-=1
    if %rept% equ 0 (
        set /p inp=没有找到重复文件夹<nul
        pause >nul
        exit
    )
    for /l %%a in (1,1,%rept%) do (
        for /f "tokens=2 delims=?" %%b in ('set SAME_[%%a]') do (
            echo %%b
            echo %%b >>%text%
            set "last=%%b"
            if "%confirm%%list%"=="01" (dir /w %%b |find " 个文件" >>%text%)
            if "%confirm%%list%"=="02" (
                dir /w %%b |more +5 |find /v " 个目录" >>%text%
            )
        )
        if "%confirm%%list%"=="11" (
            call dir /w %%last%% |find " 个文件" >>%text%
        )
        if "%confirm%%list%"=="12" (
            call dir /w %%last%% |more +5 |find /v " 个目录" >>%text%
        )
        echo,>>%text%
    )
    cd %MainDir%
    echo 清理临时文件FileRa.txt FileRb.txt
    if exist %Ra% del %Ra% %Rb%
    echo 前后时间: %t% %time%
    pause
    exit
:next
    set str=_
    rem 文件名单
    rem 有短名则使用短名,避免"="造成的变量赋值、判断问题
    for /f "tokens=4" %%a in ('dir /a /x ^|more +7 ^|find "-"') do (
        (
          call set "str=%%str%%_%%a_%ext%" 2>nul
        ) || (
          goto :out
        )
    )
    rem 空目录跳过
    if "%str%"=="_" (goto :eof)
    :out
    rem 不管字符串是否超载,都进行截取。
    set "str=%str:~0,3000%"
    set "str=%str: =#%"
    set "str=%str:,=#%"
    set "str=%str:&=#%"
    if not defined Def_%str% (
        call set "Def_%%str%%=%%cd%%"
    ) else (
        rem 做进一步确认:
        rem 原因1、变量记录的有限数据,作为初步判断
        rem 原因2、相似的文件名可以产生相同的短名
        call dir %arg% "%%Def_%str%%%" %filter% >%Ra%
        dir %arg% "%cd%" %filter% >%Rb%
        (
          fc %Ra% %Rb% >nul && (
              rem Same Folder
              call :record
          )
        ) || (
          rem echo 在疑似重复的目录中找到异同
        )
    )
    goto :eof
:record
    if not defined REPT_%str% (
        set "REPT_%str%=%rept%"
        set "COF_%str%=2"
        call set SAME_[%rept%][1]=?"%%Def_%str%%%"
        set SAME_[%rept%][2]=?"%cd%"
        set /a rept+=1
    ) else (
        call set /a "COF=%%COF_%str%%%+1"
        call set "COF_%str%=%%COF%%"
        call set "SAME_[%%REPT_%str%%%][%%COF_%str%%%]=?"%%cd%%""
    )
    goto :eofCOPY
检查D盘耗时差不多1小时。

confirm=1  list=1  详细对比并列出文件数量大小

"D:\me\IF_Batch\目录、文件操作\FindSameFolder\错误实例\复件 (2) a"
"D:\me\IF_Batch\目录、文件操作\FindSameFolder\错误实例\复件 a"
               2 个文件          1,404 字节

"D:\me\IF_Batch\目录、文件操作\FindSameFolder\错误实例\ftest"
"D:\me\IF_Batch\目录、文件操作\FindSameFolder\错误实例\复件 ftest"
               1 个文件              0 字节



confirm=0  list=1   仅对比文件名、列出文件大小
(这个时候是分开列出文件大小的,增加了一个文件夹做测试)

"D:\me\IF_Batch\目录、文件操作\FindSameFolder\大小不同的例子\CA"
               1 个文件              6 字节
"D:\me\IF_Batch\目录、文件操作\FindSameFolder\大小不同的例子\CB"
               1 个文件              3 字节

"D:\me\IF_Batch\目录、文件操作\FindSameFolder\错误实例\复件 (2) a"
               2 个文件          1,404 字节
"D:\me\IF_Batch\目录、文件操作\FindSameFolder\错误实例\复件 a"
               2 个文件          1,404 字节

"D:\me\IF_Batch\目录、文件操作\FindSameFolder\错误实例\ftest"
               1 个文件              0 字节
"D:\me\IF_Batch\目录、文件操作\FindSameFolder\错误实例\复件 ftest"
               1 个文件              0 字节


虽然不想用批处理做第九题。
没有以前那么能折腾了,做出来还是效率又低问题依旧。。。
附件,内有备注明一些错误情况。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
[url=][/url]

TOP

好多题,也好诱惑!
如无特别说明,代码测试环境均为 XP SP3

TOP

本帖最后由 xxpinqz 于 2013-7-22 18:36 编辑

vbs用来计算惯了,表示计算类都没写过。第三方更少接触,附上几个。表示纯支持,纯参与。
第一题:
@echo off
rem 能del /a/s/f/q *.*吗
set "dst=d:\bathome"
(for /f "delims=" %%a in ('dir /b/s/a "%dst%"^|sort /r') do (
      del /a/q/f "%%a"
      rd "%%a"
))>nul 2>nul
rd "%dst%"COPY
第二题:郁闷的这题,有人考虑含空格的用户名吗,表示没招,查找目录也不一定准确。或者多虑了
@echo off&setlocal enabledelayedexpansion
for /f "skip=4 delims=" %%a in ('net user^|findstr /iv "命令成功完成"') do (
     for %%i in (%%a) do set "#%%i=1"
)
for /f "delims=" %%a in (d:\BatHome_User_List.txt) do set "#%%a=!#%%a!2"
for /f "tokens=1,2 delims=#=" %%a in ('set #') do (
    if %%b equ 1 (
        set "strz=!strz!%%a "
    ) else (
        if %%b equ 2 set "strj=!strj!%%a "
    )
)
echo 非法增加用户:!strz!
echo 非法减少用户:!strj!
pauseCOPY
第三题:
@echo off
set "dx=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "xx=abcdefghijklmnopqrstuvwxyz"
set "sz=0123456789"
set "zf=$#@~_+{}|;'<>?,./\][=-)(*:"
set l=1000
setlocal enabledelayedexpansion
:loop
set/a r1=!random!%%26,r2=!random!%%10,r3=!random!%%26,r4=!random!%%10
if not defined #!r1!-!r2!-!r3!-!r4! (
     set /a l+=1
     set #!r1!-!r2!-!r3!-!r4!=!l!
)
if %l% lss 1100 goto :loop
for /f "tokens=1,2 delims=#=" %%a in ('set #') do (
    set "id=%%b"
    for /f "tokens=1-4 delims=-" %%i in ("%%a") do (
         set "pw=!dx:~%%i,1!!xx:~%%i,1!!zf:~%%i,1!!sz:~%%j,1!!dx:~%%k,1!!xx:~%%k,1!!zf:~%%k,1!!sz:~%%l,1!"
         echo net user Bathome!id:~-3! !pw! /add
    )
)
pauseCOPY
第四题:
浮点啊,不会。。。。
第五题:
算日期,也不会,只好走个捷径
@echo off
rem 不会计算日期,只好这么写了,win7测试,XP默认是周还是星期?
more +6 <%~fs0>autobak.bat
schtasks /create /tn autobak /sc daily /ru system /tr "%~dp0autobak.bat" /f
goto :eof
@echo off
cd /d "%~dp0"
for /f "tokens=1-4 delims=-/ " %%a in ("%date%") do (
    set "today=%%b-%%c-%%a"
    set "week=%%d"
)
if not exist "*.lst" (
     (echo logs\
      echo img\
      echo .zip
      echo .bak
    )>"%today%.lst"
)
for %%a in (*.lst) do set "day=%%~na"
ren "%day%.lst" "%today%.lst"
if "%week:周=星期%"=="星期日" (
    xcopy "d:\www.bathome\*.*" "d:\bbs.bathome\%week%\" /yshr
) else (
    xcopy "d:\www.bathome\*.*" "d:\bbs.bathome\%week%\" /yshr /d:%day% /exclude:%today%.lst
)COPY
第六题:
计算的略过
第七题:
curl,纯欣赏。
第八题:
@echo off&setlocal enabledelayedexpansion
more +20<%~s0>tmp
set "c=零-+0# 壹-+1# 贰-+2# 叁-+3# 肆-+4# 伍-+5# 陆-+6# 柒-+7# 捌-+8# 玖-+9# 拾-0 佰-00 仟-000 万-^)#0000+^(0 角-0 分- "
for /f "delims=" %%z in (tmp)do (
  for /f "tokens=1,2 delims=圆整" %%i in ("%%z")do (
    set "str=(%%i).%%j"
    for %%a in (%c%) do (
      for /f "tokens=1-2 delims=-" %%b in ("%%a")do set "str=!str:%%b=%%c!"
    )
    for /f "tokens=1-2 delims=." %%a in ("!str:#=*1!")do (
      set/a xs=100%%b,num=%%a
      set "num=0000000000!num!.!xs:~-2!"
      set "#!num:~-12!=%%z"
    )
  )
)
for /f "tokens=2 delims==" %%a in ('set #')do echo,%%a
del /f tmp&pause>nul&goto :eof
陆拾叁万贰仟伍佰肆拾叁圆叁角整
伍万圆整
捌万零肆佰圆伍角叁分
壹佰圆整
贰佰万叁仟贰佰陆拾陆圆零叁分
柒佰柒拾万零捌拾叁圆整
叁万圆肆角肆分
壹圆整
玖仟万零玖圆玖角COPY
第玖题:
@echo off&setlocal enabledelayedexpansion
set "src=%~dp0"
(for /d /r f: %%a in (*) do (
    pushd "%%a"
    set str=
    for %%b in (*) do set "str=!str!%%b"
    if defined str (
          echo,!str!*%%a
    ) else (
          echo,%%a >>%src%$t
    )   
))>%src%$f
cd /d "%src%"
echo                    相同的不含文件的文件夹:
type $t
echo                      含相同文件的文件夹:
for /f "tokens=1* delims=*" %%a in ('sort $f') do (
    set "str1=!str2!"
    set "path1=!path2!"
    set "str2=%%a"
    set "path2=%%b"
    if "!str1!"=="!str2!" (
    echo !path1!
    set .=.
    ) else (
        if defined . (
              set.=
              echo,!path1!
              echo ---------------传说的分割线---------------
        )
    )
)
if defined . echo,!path2!
del $?&pauseCOPY
第十题:
没整过html,也不知道对不对.
@echo off
set "char=一 二 三 四 五 六 七 八 九 十 零"
(echo ^<HTML^>^<BODY^>
for /f "delims=" %%a in ('findstr /bivx "图[0-9]*\.[0-9]*$" 时间简史.txt') do (
    for /f "delims=章" %%b in ("%%a") do (
        set "str=%%b"
        setlocal enabledelayedexpansion
        for %%c in (%char%) do set "str=!str:%%c=!"
        if "!str!"=="第" echo ^<br^>
        endlocal
    )
    echo ^<br^>
    echo ^&nbsp^&nbsp^&nbsp^&nbsp%%a^<br^>
)
echo ^</BODY^>^</HTML^>
)>时间简史.htmlCOPY
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 apang 于 2013-8-12 08:28 编辑

1.
@echo off
%1(for /f "delims=" %%a in ('%~s0 :^|sort /r') do del/a/f/q %%a&rd/q %%a)&exit /b
set "folder=D:\BatHome"
echo,"%folder%\"
call :GetSubFolder "%folder%"
exit /b
:GetSubFolder
for /f "delims=" %%a in ('dir /ad/b "%~1\"') do (
    echo,"%~1\%%a\"
    call :GetSubFolder "%~1\%%a"
)COPY
2.
@echo off
set "wmic=wmic useraccount get name /value"
(for /f "tokens=2delims==" %%a in ('%wmic%^|find "="') do (
    for /f "tokens=*" %%b in ("%%a") do echo,%%b
))>$
for /f "delims=" %%a in ('findstr/ixvg:"D:\BatHome_User_List.txt" $') do (
    echo,增加的用户:%%a
)
for /f "delims=" %%a in ('findstr/ixvg:$ "D:\BatHome_User_List.txt"') do (
    echo,减少的用户:%%a
)
del $
pauseCOPY
3.
:~!@#$%^&*()+-=<>?/\|
@echo off&setlocal enabledelayedexpansion
set "str=QWERTYUIOPASDFGHJKLZXCVBNM qwertyuiopasdfghjklzxcvbnm"
set "str1=1234567890"
set /p str2=<%0
for /l %%a in (1001 1 1100) do (
    set "pwd=" & set "Name=%%a"
    for %%b in (%str%) do (
        set "a=%%b"
        set /a r=!random! %% 26
        for %%c in (!r!) do set "pwd=!pwd!!a:~%%c,1!"
    )
    set /a r1=!random! %% 10,r2=!random! %% 21
    for %%a in (!r1!) do set "pwd=!pwd!!str1:~%%a,1!"
    for %%a in (!r2!) do set "pwd=!pwd!!str2:~%%a,1!"
    Net User "BatHome!Name:~1!" "!pwd!%%a" /add
    echo,用户名:BatHome!Name:~1! 密码:!pwd!%%a>>List.txt
)
pauseCOPY
4.
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2*" %%a in ('systeminfo') do (
    if "%%a"=="物理内存总量:" set "mem=%%b"
    if "%%a"=="可用的物理内存:" set "freemem=%%b"
    if "%%a"=="系统启动时间:" (
        for /f "tokens=1-8" %%i in ("%%b %%c") do (
            set /a "st=%%i*24*3600+%%k*3600+%%m*60+%%o"
        )
    )
)
set /a "mem1=%mem:,=%0/1024,mem2=100*(%mem:,=%-%freemem:,=%)/%mem:,=%"
>D:\BatHome_OS.txt echo,已运行时间:%st%
>>D:\BatHome_OS.txt echo,物理内存总量:%mem1:~,-1%.%mem1:~-1%GB
>>D:\BatHome_OS.txt echo,内存使用率:%mem2%%%
set wmic=wmic logicaldisk where "DriveType='3'"
(for /f "tokens=1-3" %%i in ('%wmic% get freespace^,name^,size^|find ":"') do (
    call :GetSize %%k00
    set /a a=Size/1024
    set /p=%%j容量:!a:~,-1!.!a:~-1!GB <nul
    call :GetSize %%i00
    set /a "b=100*(a-Size/1024)/a"
    set /p=使用率:!b!%%<nul
    echo,
))>>D:\BatHome_OS.txt
pause&goto :eof
:GetSize
set "num=%1"&set "Size="&set "n="
for %%a in (16 8 4 2 1) do (
    if not "!num:~%%a!"=="" set /a n+=%%a&set "num=!num:~%%a!"
)
set "num=%1"
set /a n-=6
for /l %%a in (!n! -1 1) do (
    set "s=!num:~,-%%a!"
    if "!s:~,1!"=="0" set "s=!s:~1!"
    set /a m=s%%1048576,s/=1048576
    set "Size=!Size!!s!"
    set "num=!m!!num:~-%%a!"
)
if "!Size:~,1!"=="0" set "Size=!Size:~1!"COPY
5.
@echo off
::需要更改 Name 和 PWD 为实际的登录用户名和密码
more +6 "%~0">"%~dp0Back.bat"
schtasks /create /tn FulBack /tr "cmd /cxcopy /shcy \"D:\www.bathome\*\" \"D:\bbs.bathome\\"" /sc weekly /d sun /ru Name /rp PWD
schtasks /create /tn IncBack /tr \""%~dp0Back.bat"\" /sc weekly /d mon,tue,wed,thu,fri,sat /ru Name /rp PWD
pause&goto :eof
pushd "%~dp0"
(for %%a in ("\logs\" "\img\" ".zip" ".bak") do echo,%%~a)>$
xcopy /shcdy /exclude:$ "D:\www.bathome\*" "D:\bbs.bathome\"
del $COPY
6.
@echo off&setlocal enabledelayedexpansion
set /p Num1=输入被除数(正整数):
set /p Num2=输入除数(小于9位数的正整数):
set "x=100"
set /a Len1=Len2=0&set "tmp=%Num1%"
for %%a in (64 32 16 8 4 2 1) do (
    if "!tmp:~%%a!" neq "" set /a Len1+=%%a&set "tmp=!tmp:~%%a!"
)
set "tmp=%Num2%fedcba9876543210"
set /a Len2=0x!tmp:~15,1!
for /l %%a in (1 10 %x%) do set "str=!str!0000000000"
set "str=%Num1%%str%0"
set /a n = Len1 - Len2 + x + 1
for /l %%a in (!n! -1 1) do (
    set "s=!str:~,-%%a!"
    if "!s:~,1!"=="0" set "s=!s:~1!"
    set /a m=s %% Num2,s/=Num2
    set "Size=!Size!!s!"
    set "str=!m!!str:~-%%a!"
)
if %Len1% lss %Len2% (
    set "Size=0000000000!Size!" & set "Size=!Size:~-%x%!"
) else if "!Size:~,1!"=="0" set "Size=!Size:~1!"
echo,%Num1% ÷ %Num2% = !Size:~,-%x%!.!Size:~-%x%!
pauseCOPY
7.
@echo off&setlocal enabledelayedexpansion
::需要第三方工具 wget 和 geturls
set "url=http://www.zhuoku.com/zhuomianbizhi/show/index-1.htm"
set "str=tool.zhuoku.com/tool/dyw_size.php?width=1440&height=900&corp_x=center&corp_y=top&picurl=.."
wget -O "%tmp%\$1" "%url%" 2>nul
md show 2>nul
for /f "delims=" %%a in ('geturls /s:"zhuomianbizhi"^<"%tmp%\$1"^|findstr /i "\/[0-9]*\.htm$"') do (
    if not defined %%~na (
        wget -O "%tmp%\$2" "http://www.zhuoku.com/%%a" 2>nul
        for /f "delims=" %%b in ('geturls^<"%tmp%\$2"^|findstr /i "\.jpg$"')do (
            set "a=%%b"
            set "a=!a:/thumbs/tn_=/!"
            for /f "delims=" %%c in ("!a:img.zhuoku.com=%str%!") do (
                wget -O "show\%%~nxc" "%%c"
            )
        )
        set "%%~na=1"
    )
)
del "%tmp%\$*"COPY
8.
@echo off&setlocal enabledelayedexpansion
%1(for /f "tokens=2delims=." %%a in ('%~s0 :^|sort') do echo,%%a)>b.txt&exit /b
for /f "delims=" %%a in (a.txt) do (
    set "a=%%a" & set /a n=0
    for %%b in (整 角 分) do set "a=!a:%%b=!"
    for %%b in (捌 玖 拾) do set "a=!a:零%%b=%%b!"
    set "a=!a:拾=*10+!"
    set "a=!a:佰=*100+!"
    set "a=!a:仟=*1000+!"
    for %%b in (零 壹 贰 叁 肆 伍 陆 柒 捌 玖) do (
        for %%c in (!n!) do set "a=!a:%%b=%%c!"
        set /a n+=1
    )
    set "a=!a:+万=万!" & set "a=!a:+圆=圆!"
    if "!a:万=!" neq "!a!" set "a=(!a:万=)*10000+!"
    if "!a:圆=!"=="!a!" set "a=0!a!"
    set "a=!a:+圆=圆!"
    set "b=!a:*圆=!00"
    set "b=!b:~,2!"
    for /f "delims=圆" %%b in ("!a!") do set /a "a=%%b"
    set "str=..........!a!!b!"
    echo,!str:~-11!.%%a
)COPY
9.
@echo off&setlocal enabledelayedexpansion
md "%tmp%\~tmp\" 2>nul
for /d /r "f:\" %%a in (*) do (
    set /a n+=1
    set "_!n!=%%a"
    (for %%b in ("%%a\*") do echo,%%~nxb)>"%tmp%\~tmp\!n!.tx"
)
pushd "%tmp%\~tmp\"
(for /l %%a in (1 1 !n!) do (
    for /f "delims=" %%b in ('findstr/imxg:%%a.tx *.tx 2^>nul')do (
        if /i not "%%a.tx"=="%%b" (
            fc /c %%a.tx %%b|find /i "FC: 找不到">nul && (
                if not defined #%%a (
                    echo,!_%%a!&type %%a.tx&echo,
                    set #%%a=1
                )
                if not defined #%%~nb (
                    echo,!_%%~nb!&type %%b&echo,
                    set #%%~nb=1
                )
            )
        )
    )
))>"%~dp0List.txt"
popd&rd "%tmp%\~tmp\" /s /q
pauseCOPY
10.
@echo off
(echo,^<html^>&echo,^<body^>)>a.html
(for /f "delims=" %%a in ('findstr/ivn "^图[0-9]*\.[0-9]*" a.txt') do (
    set "str=%%a"
    setlocal enabledelayedexpansion
    set "str=!str:*:=!"
    if "!str:~,1!"=="第" if "!str:章=!" neq "!str!" set flag=1
    if defined flag (
        echo,^</br^>
        set "str=<p>!str!</p>"
    ) else (
        if "!str!" neq "" (
            set "str=&nbsp;&nbsp;&nbsp;&nbsp!str!</br>"
        ) else set "str=!str!</br>"
    )
    echo,!str!
    endlocal
))>>a.html
(echo,^</body^>&echo,^</html^>)>>a.html
pauseCOPY

TOP

本帖最后由 ShadowFiend 于 2013-7-23 17:46 编辑

现在第六题,看有时间再做其他
@rem 第六题
@echo off
set ucase=ABCDEFGHIJKLMNOPQRSTUVWXYZ
set lcase=abcdefghijklmnopqrstuvwxyz
set num=0123456789
rem 下面是除了space外的特殊字符,共32个
set "spec=!#$%%&'()*+,-./:;<=>?@[\]^_`{|}~""
set "all=%ucase%%lcase%%num%%spec%"
set /a len=26+26+10+32,count=1
setlocal enabledelayedexpansion
:start
set op=&set o=
rem 先分别在四种类型字符中选一个,保证至少存在四类字符
for %%i in (%ucase%_26 %lcase%_26 %num%_10) do (
set "tmp=%%i"
set /a n=!random!%%!tmp:~-2!
for %%j in (!n!) do set "op=!op!!tmp:~%%j,1!"
)
rem 特殊字符特殊处理
set /a n=!random!%%32
for %%i in (!n!) do set "op=!op!!spec:~%%i,1!"
rem 再从所有字符中选出剩余的四个字符
for /l %%i in (1 1 4) do (
set /a n=!random!%%%len%
for %%j in (!n!) do set "op=!op!!all:~%%j,1!"
)
rem 对8个字符做乱序处理,保证随机性
for /l %%i in (8 -1 1) do (
set /a n=!random!%%%%i
for %%j in (!n!) do (
set "o=!o!!op:~%%j,1!"
set /a q=!n!+1
for %%k in (!q!) do (set "op=!op:~0,%%j!!op:~%%k,8!")
)
)
rem 判断是否重复,不重复则输出,出现重复的概率太小,个人认为没必要判断
if %count% leq 100 (
set c=%count%
if %count% lss 100 (
if %count% lss 10 (
set c=00%count%
) else (
set c=0%count%
)
)
echo username: Bathome!c! password: !o!
set /a count+=1
if %count% lss 100 (goto start)
)
pauseCOPY
nevermore

TOP

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

最近空时间多,来凑个热闹,希望能拿个第三名吧!
所有代码在win7下测试通过。
有什么问题还望Batcher指点。
帖子代码的显示稍微窄了点儿,长一点的句子显示出来不整齐。
总共才300kb,结果附件不能大于50kb,不得不压缩成7个包... ...
1、
@echo off
call :rd ".\测试文件夹"&exit
:rd
for /f "delims=" %%a in ('dir/a-d/b %1 2^>nul') do if not "%%a"=="" del "%~1\%%a" /f
for /f "delims=" %%a in ('dir/ad/b %1 2^>nul') do if not "%%a"=="" call :rd "%~1\%%a"
rd %1 /q 2>nulCOPY
2、
@echo off
for /f "skip=4 delims=" %%i in ('net user') do (
if not "%%i"=="命令成功完成。" (
    (for %%j in (%%i) do echo %%j)>User_List.txt
))
(findstr /v /g:User_List.txt DBatHome_User_List.txt)>Gone_Users.txt
(findstr /v /g:DBatHome_User_List.txt User_List.txt)>New_Users.txtCOPY
3、
@echo off
set str=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%%^^^&*+
setlocal enabledelayedexpansion
for /l %%a in (1001,1,1100) do (
    call :get_rnd
    set password=%%a!rnd!
    set username=%%a&set username=!username:~1!&set username=BatHome!username!
    echo net user !username! !password! /add
)
pause&exit
:get_rnd 生成四位带一个大写、一个小写字母、一个数字、一个特殊字符的不重复字符串
set rnd=
set /a l=!random!%%26,u=!random!%%26+26,n=!random!%%10+52,t=!random!%%10+62
for %%a in (!l!,!u!,!n!,!t!) do (
    set rnd=!rnd!!str:~%%a,1!
)
if not defined !rnd! (set !rnd!=yes
) else (call :get_rnd)COPY
4、
@echo off&title DateToSecs函数 BY Batcher Else BY wankoilz
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=!##!)"
setlocal enabledelayedexpansion
echo MemoryInfo:
call :Show_MemoryInfo
echo;&echo DiskInfo(Wait a moment):
call :Show_DiskInfo
echo;&echo SystemRunningTimeDiff:
call :Show_SystemRunningTimeDiff
echo;&pause&goto :eof
:Show_MemoryInfo
for %%a in (物理内存总量 可用的物理内存) do (
    set /a n+=1
    for /f "tokens=2" %%b in ('systeminfo ^| findstr "%%a"') do (
        set mem!n!=%%b
    )
)
set rest=!mem2:^,=!&set total=!mem1:^,=!
set/a used=!total!-!rest!
set used=!used!0000
set/a percent=!used!/!total!
set percent=0000!percent!
set percent_int=!percent:~0,-2!&set percent_float=!percent:~-2!
call :trim percent_int !percent_int!
set percent=!percent_int!.!percent_float!
set total=!total!0000
set/a total=!total!/1024
set total=0000!total!
set int_total=!total:~0,-4!&set float_total=!total:~-4!
call :trim int_total !int_total!
set total_GB=!int_total!.!float_total!
echo     总内存:!total_GB!GB
echo 内存使用率:!percent!
goto :eof
:Show_DiskInfo
for /f "skip=1 tokens=1-3" %%a in ('wmic logicaldisk get name^,size^,freespace') do (
    if not "%%c"=="" (
        set quotient=&call :division %%c 1073741824
        set size=!quotient! GB
        set quotient=&call :division %%a %%c
        set quotient=!quotient:^.=!&set quotient=!quotient:~0,5!
        call :trim quotient !quotient!
        set/a used_per=10000-!quotient!
        set used_per=0000!used_per!&set used_per=!used_per:~-4!
        set used_per_int=!used_per:~0,2!&set used_per_float=!used_per:~2!
        call :trim used_per_int !used_per_int!
        set used_per=!used_per_int!.!used_per_float!
        for /l %%a in (1,1,13) do set size= !size!
        echo %%b盘容量!size:~-13!   使用率!used_per!
    )
)
goto :eof
:Show_SystemRunningTimeDiff
for /f "tokens=2-3" %%a in ('net statistics workstation^|findstr "统计数据开始于"') do (
    set StartTime=%%a %%b
)
for /f "tokens=1" %%a in ("%date%") do set date=%%a
set EndTime=%date% %time:~0,-3%
echo 最近一次开机时间:%starttime%
echo         当前时间:%endtime%
call :DateDiff %StartTime% %EndTime%
echo   系统已运行时间:%Y%%D%%H%%M%%S%
goto :eof
:DateDiff !StartTime! !EndTime!
set StartTime=%StartTime:-= %
set StartTime=%StartTime:/= %
set StartTime=%StartTime::= %
set EndTime=%EndTime:-= %
set EndTime=%EndTime:/= %
set EndTime=%EndTime::= %
call :DateToSecs %StartTime% StartSecs
call :DateToSecs %EndTime% EndSecs
set /a DiffSecs=EndSecs-StartSecs
set DiffSecs=%DiffSecs:-= %
set /a Y=DiffSecs/31536000
set /a D=(DiffSecs%%31536000)/86400
set /a H=(DiffSecs%%86400)/3600
set /a M=(DiffSecs%%3600)/60
set /a S=DiffSecs%%60
goto :eof
:DateToSecs %yy% %mm% %dd% %hh% %nn% %ss% secs
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5&set ss=%6
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100
set /a j=j*86400+hh*3600+nn*60+ss
endlocal&set %7=%j%&goto :eof
:division
setlocal
set dividend=%1&set divisor=%2
%len:$=dividend length_dividend%
%len:$=divisor length_divisor%
set add=4
for /l %%a in (1,1,!add!) do set dividend=!dividend!0
set/a length_dividend+=!add!
set/a up=!length_dividend!-1
for /l %%a in (0,1,!up!) do (
    set minuend=!minuend!!dividend:~%%a,1!
    call :trim minuend !minuend!
    call :compare !minuend! !divisor!
    if "!flag_com!"=="geq" (
        set quo=&call :subtraction !minuend! !divisor!
        set quotient=!quotient!!quo!
        set minuend=!D_value!
    ) else (
        set quotient=!quotient!0
    )
)
set int=!quotient:~0,-%add%!&set float=!quotient:~-%add%!
call :trim int !int!
set quotient=!int!.!float!
endlocal&set quotient=%quotient%&goto :eof
:subtraction  被减数  减数
setlocal&set a=%1&set b=%2&set/a quo+=1
%len:$=a length_a%
set b=0!b!&set b=!b:~-%length_a%!
set/a p=!length_a!-1
for /l %%a in (0,1,!p!) do (
    set arrA_%%a=!a:~%%a,1!
    set arrB_%%a=!b:~%%a,1!
)
for /l %%a in (!p!,-1,0) do (
    if !arrA_%%a! geq !arrB_%%a! (
        set/a dif=!arrA_%%a!-!arrB_%%a!&set diff=!dif!!diff!
    ) else (
        set/a borrow=%%a-1
        set/a arrA_!borrow!-=1
        set/a dif=!arrA_%%a!+10-!arrB_%%a!
        set diff=!dif!!diff!
    )
)
if "!diff:~0,1!"=="0" call :trim diff !diff!
call :compare !diff! %2
if "!flag_com!"=="geq" (
endlocal&set quo=%quo%&set diffr=%diff%&call :subtraction !diffr! %2
) else (
endlocal&set quo=%quo%&set D_value=%diff%&goto :eof
)
:compare  被减数  减数(除数)
setlocal&set a=%1&set b=%2
%len:$=a length_a%
%len:$=b length_b%
set/a l=!length_a!-1
if !length_a! gtr !length_b! (endlocal&set flag_com=geq&goto :eof)
if !length_a! lss !length_b! (endlocal&set flag_com=lss&goto :eof)
if !length_a! equ !length_b! (
    if "!a!"=="!b!" (
        endlocal&set flag_com=geq&goto :eof
    ) else (
        for /l %%a in (0,1,!l!) do (
                if "!a:~%%a,1!" gtr "!b:~%%a,1!" (endlocal&set flag_com=geq&goto :eof)
                if "!a:~%%a,1!" lss "!b:~%%a,1!" (endlocal&set flag_com=lss&goto :eof)
        )
    )
)
:trim
setlocal
set a=%2
if "!a:~0,1!"=="0" (if not "!a!"=="0" (endlocal&set %1=%a:~1%&call :trim %1 !%1!))COPY
5、
@echo off
Rem 增量备份就是加了个/d
if "%date:~-2%"=="周日" (
    xcopy /e/h/r/y/k/o/f/exclude:filter.txt "D:\www.bathome" "D:\bbs.bathome"
) else (
    xcopy /e/h/r/y/k/o/f/d/exclude:filter.txt "D:\www.bathome" "D:\bbs.bathome"
)
pause>nulCOPY
6、
@echo off&Rem 因为精确位数很容易修改,所以最后一位没有进行四舍五入
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=!##!)"
setlocal enabledelayedexpansion&title 任意位正整数除法 BY wankoilz
set/p x=输入被除数:
set/p y=输入除数:
echo 计算中...
call :division !x! !y!
cls&echo 被除数:!x!&echo 除数:!y!&echo 商:!quotient!
echo;&pause&exit
:division
setlocal
set dividend=%1&set divisor=%2
%len:$=dividend length_dividend%
%len:$=divisor length_divisor%
set add=100
for /l %%a in (1,1,!add!) do set dividend=!dividend!0
set/a length_dividend+=!add!
set/a up=!length_dividend!-1
for /l %%a in (0,1,!up!) do (
    set/p=^><nul
    set minuend=!minuend!!dividend:~%%a,1!
    call :trim minuend !minuend!
    call :compare !minuend! !divisor!
    if "!flag_com!"=="geq" (
        set quo=&call :subtraction !minuend! !divisor!
        set quotient=!quotient!!quo!
        set minuend=!D_value!
    ) else (
        set quotient=!quotient!0
    )
)
set int=!quotient:~0,-%add%!&set float=!quotient:~-%add%!
call :trim int !int!
set quotient=!int!.!float!
endlocal&set quotient=%quotient%&goto :eof
:subtraction  被减数  减数
setlocal&set a=%1&set b=%2&set/a quo+=1
%len:$=a length_a%
set b=0!b!&set b=!b:~-%length_a%!
set/a p=!length_a!-1
for /l %%a in (0,1,!p!) do (
    set arrA_%%a=!a:~%%a,1!
    set arrB_%%a=!b:~%%a,1!
)
for /l %%a in (!p!,-1,0) do (
    if !arrA_%%a! geq !arrB_%%a! (
        set/a dif=!arrA_%%a!-!arrB_%%a!&set diff=!dif!!diff!
    ) else (
        set/a borrow=%%a-1
        set/a arrA_!borrow!-=1
        set/a dif=!arrA_%%a!+10-!arrB_%%a!
        set diff=!dif!!diff!
    )
)
if "!diff:~0,1!"=="0" call :trim diff !diff!
call :compare !diff! %2
if "!flag_com!"=="geq" (
endlocal&set quo=%quo%&set diffr=%diff%&call :subtraction !diffr! %2
) else (
endlocal&set quo=%quo%&set D_value=%diff%&goto :eof
)
:compare  被减数  减数(除数)
setlocal&set a=%1&set b=%2
%len:$=a length_a%
%len:$=b length_b%
set/a l=!length_a!-1
if !length_a! gtr !length_b! (endlocal&set flag_com=geq&goto :eof)
if !length_a! lss !length_b! (endlocal&set flag_com=lss&goto :eof)
if !length_a! equ !length_b! (
    if "!a!"=="!b!" (
        endlocal&set flag_com=geq&goto :eof
    ) else (
        for /l %%a in (0,1,!l!) do (
                if "!a:~%%a,1!" gtr "!b:~%%a,1!" (endlocal&set flag_com=geq&goto :eof)
                if "!a:~%%a,1!" lss "!b:~%%a,1!" (endlocal&set flag_com=lss&goto :eof)
        )
    )
)
:trim
setlocal
set a=%2
if "!a:~0,1!"=="0" (if not "!a!"=="0" (endlocal&set %1=%a:~1%&call :trim %1 !%1!))COPY
7、
@echo off&setlocal enabledelayedexpansion
set/p url=请输入系列壁纸的网址:
Rem wget http://www.zhuoku.com/zhuomianbizhi/star-starcn/20130729110511.htm
wget !url!
set Lf=^
for %%a in ("!url!") do (set filename=%%~nxa&set dirname=%%~na)
md !dirname! 2>nul
for /f "delims=" %%a in ('findstr "src=.*http.*img.zhuoku.com.*jpg" !filename!') do (
    set "str=%%a"
    for %%b in ("!Lf!") do set "str=!str:img src=%%b!"
    for /f "delims=" %%c in ('set str^| findstr "http.*img.zhuoku.com.*jpg"') do (
        for /f %%d in (%%c) do (
            set "url=%%d"
            set "url=!url:~2,-1!"
            set "url=!url:img=bizhi!"
            set "url=!url:/thumbs=!"
            set "url=!url:tn_=!"
            wget !url!
            for %%e in ("!url!") do move %%~nxe !dirname!\
        )
    )
)
del "!filename!" /f
cls&echo 下载完毕!
pause>nulCOPY
8、
@echo off&echo; 2>nul 3>nul
set "cmd1=for /f "delims=" %%x in ("!str:~-1!") do set x_danwei=!%%~x!"
set "cmd2=for /f "delims=" %%x in ("!str:~0,-1!") do set n_danwei=!%%~x!"
setlocal enabledelayedexpansion
set 壹=1&set 贰=2&set 叁=3&set 肆=4&set 伍=5
set 陆=6&set 柒=7&set 捌=8&set 玖=9
set 万=1&set 仟=1000&set 佰=100
set 拾=10&set 圆=1&set 角=10&set 分=1
for /f %%a in (a.txt) do (
    set str=%%a&set str=!str:整=!&set str=!str:零=!
    for %%b in (万_wan 仟_qian 佰_bai 拾_shi 圆_yuan 角_jiao 分_fen) do (
        for /f "delims=_ tokens=1,2" %%c in ("%%b") do call :decompose %%c %%d
    )
    set str=!wan!
    for %%c in (仟_q 佰_b 拾_s 万_g) do (
        for /f "delims=_ tokens=1-2" %%d in ("%%c") do (
             call :decompose %%d %%e
    ))      
    for %%c in (q b s g) do (
        set str=!%%c!
        %cmd1%
        %cmd2%
        set/a sum+=!n_danwei!*!x_danwei!
    )
    set/a sum=!sum!*10000
    for %%c in (qian bai shi yuan) do (
        set str=!%%c!
        %cmd1%
        %cmd2%
        set/a sum+=!n_danwei!*!x_danwei!
    )
    for %%c in (jiao fen) do (
        set str=!%%c!
        %cmd1%
        %cmd2%
        set/a float+=!n_danwei!*!x_danwei!
    )
    set float=00!float!&set float=!float:~-2!
    set sum=0000000000!sum!!float!&set sum=!sum:~-10!
    set sort_!sum!=%%a
    for %%c in (wan qian bai shi yuan jiao fen) do set %%c=
    set sum=&set float=
)
echo 升序:&echo;
for /f "delims== tokens=2" %%a in ('set sort') do echo %%a
pause>nul
:decompose
set t=!str:*%1=!&if "!t!"=="" (set %2=!str!&goto :eof)
set %2=!str:%t%=!& if "!%2!"=="" goto :eof
call set str=%%str:!%2!=%%COPY
9、
@echo off&setlocal enabledelayedexpansion&echo; 2>nul 3>nul
Rem 要查F盘改 ".\测试文件夹" 为 "F:"
echo 查找中...
md tmp123
call :loop ".\测试文件夹"
for /f "delims=" %%a in ('dir/b tmp123') do (set/a n+=1&set "arr_!n!=%%a")
set/a u=!n!-1
for /l %%a in (1,1,!u!) do (
    set/a low=%%a+1,up=!n!
    for /l %%b in (!low!,1,!up!) do (
        fc "tmp123\!arr_%%a!" "tmp123\!arr_%%b!" | findstr "找不到差异" >nul&&set "f_!arr_%%a!=!arr_%%b!"
    )
)
cls&echo 存在重复情况的目录:&echo;
for /f "delims=_= tokens=2,3" %%a in ('set f_') do (
    set "s=%%a"&set "i=%%b"
    set "s=!s:$=:!"&set "i=!i:$=:!"
    set "s=!s:#=\!"&set "i=!i:#=\!"
    echo !s! = !i!
)
rd tmp123 /s/q
pause
goto :eof
:loop
set "fn=%~1"&set fn=!fn::=$!&set fn=!fn:\=#!
(for /f "delims=" %%a in ('dir/a-d/b "%~1"') do echo %%a)>"tmp123\!fn!"
for /d %%a in ("%~1\*") do call :loop "%%a"COPY
10、
@echo off&setlocal enabledelayedexpansion
Rem 目录
(
echo ^<html^>^<body^>
for /f "delims=" %%a in ('findstr/v "^图[0-9]*\.[0-9]*$" 时间简史.txt') do (
    set "s=%%a"
    if "!s!"=="时间简史 目录" set flag_mulu=true
    if defined flag_mulu (
        for /l %%x in (1,1,4) do set "s=&nbsp!s!"
        for /f "tokens=1 delims=  " %%x in ("!s!") do (
            set "t=%%x"&if "!t:~20,1!!t:~-1!"=="第章" set "s=<br>!s!"
        )
        set "s=!s!<br>"
    echo !s!
))
echo ^<br^>^<br^>
)>时间简史.htm
set flag_mulu=
Rem 正文
(for /f "delims=" %%a in ('findstr/v "^图[0-9]*\.[0-9]*$" 时间简史.txt') do (
    set "s=%%a"
    if "!s!"=="时间简史 目录" set flag_mulu=true
    if not defined flag_mulu (
        for /l %%x in (1,1,4) do set "s=&nbsp!s!"
        for /f "tokens=1 delims=  " %%x in ("!s!") do (
            set "t=%%x"&if "!t:~20,1!!t:~-1!"=="第章" set "s=<font size="5" color="blue">!s!</font>"
        )
        set "s=!s!<br><br>"
    echo !s!
))
echo ^</body^>^</html^>
)>>时间简史.htm
echo OK&pauseCOPY






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

TOP

诈尸出来,支持一下!
SYBN QQ:354324773

TOP

好久没进论坛了都忘记了!

TOP

怎么没动静了……

TOP

回复 11# wankoilz


    各位评委在评分的时候十分谨慎,所以需要比较长的时间。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

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

TOP

评分结果出来了,公示一周。
感谢各位评委的辛苦工作!
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

总感觉第五的位置公示一周是很郁闷的事情
4 和6 你们怎么看?
[url=][/url]

TOP

返回列表