本帖最后由 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
-
复制代码 第三题,
修改时间: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
- exit
复制代码
编号和密码: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
- 陆拾叁万贰仟伍佰肆拾叁圆叁角整
- 伍万圆整
- 捌万零肆佰圆伍角叁分
- 壹佰圆整
- 贰佰万叁仟贰佰陆拾陆圆零叁分
- 柒佰柒拾万零捌拾叁圆整
- 叁万圆肆角肆分
- 壹圆整
复制代码 第九题
最后修改: 8月19日
基本上在遇到含有%%!! () & 符号的文件、文件夹时不会出错。不过效率很低。
如果多个目录相同,比如,A=B=C 可以并排列出。而不是A=B,B=C,A=C分别列出。复制代码 检查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 字节
虽然不想用批处理做第九题。
没有以前那么能折腾了,做出来还是效率又低问题依旧。。。
附件,内有备注明一些错误情况。
|