标题: [文件操作] 随机生成文件的批处理中set命令如何理解? [打印本页]
作者: LWJ菜鸟 时间: 2011-6-23 13:27 标题: 随机生成文件的批处理中set命令如何理解?
本帖最后由 LWJ菜鸟 于 2011-6-27 10:11 编辑
在看帖的时候看到了一段代码,如下:生成一个test文件夹,并在该文件夹下随机生成一系列文件的代码。这句:set "var=!var!%%str:~!a!,1%%"我看不懂,是什么意思?希望可以得到详细点的解答- @echo off&setlocal enabledelayedexpansion
- set "str=abcdefghijklmnopqrstuvwxyz0123456789"
- set "code=jpg txt bat exe wma mp3"
- md test&cd test
- for /l %%a in (1,1,20) do (
- for /l %%b in (1,1,9) do (
- set /a a=!random!%%36
- call,set "var=!var!%%str:~!a!,1%%"
- )
- set /a b=!random!%%5+1&call :lp
- set "var="
- )
- goto :eof
- :lp
- for /f "tokens=%b%" %%c in ("%code%") do echo.>!var!.%%c
复制代码
作者: 601997526 时间: 2011-6-23 14:37
本帖最后由 601997526 于 2011-6-23 15:40 编辑
[code]@echo off&setlocal enabledelayedexpansion 关闭回显并开启变量延迟
set "str=abcdefghijklmnopqrstuvwxyz0123456789"定义变量str
set "code=jpg txt bat exe wma mp3"定义变量code
md test&cd test新建test文件夹并进入该文件夹
for /l %%a in (1,1,20) do (for循环20次
for /l %%b in (1,1,9) do (循环9次
set /a a=!random!%%36定义变量a等于0至35中的任意随机整数
call,set "var=!var!%%str:~!a!,1%%"定义变量var等于var+str变量中的任意一个字母
)
set /a b=!random!%%5+1&call :lp定义变量b等于1至5中的任意随机整数并执行:lp后面的命令
set "var="定义变量var为空
)
goto :eof跳转到代码文件最后
:lp
for /f "tokens=%b%" %%c in ("%code%") do echo.>!var!.%%c显示变量var.随机扩展名
call,set "var=!var!%%str:~!a!,1%%"
比如变量a第一次循环时等于5,var=!var!%str:~5,1%,因为此前!var!没有赋值,而%str:~5,1%等于str变量中的第五个字符后面的一位字符=f,所以var等于f,若第二次循环时a还是等于5,此时var=!var!%str:~5,1%因!var!已经等于字母f,所以var=ff,若第三次循环时a等于8,此时var=!var!%str:~8,1%,因!var!已经等于字母ff,%str:~8,1%=str中第八个字符后的一位=i,所以var=ffi,以此类推
至于call的用法你在论坛一搜一大把,这个就不多解释了,总之在这里就是多用了一对百分号%,你就把这个看成是一种使用call命令的格式吧
最后建议楼主以后发贴时把代码用code括起来吧,这样也方便大家复制
这个我本来也是想用code括起来的,但是发现括起来就没有颜色显示了,所以最后就没有括起来了,再说我这复制了也运行不了
作者: LWJ菜鸟 时间: 2011-6-27 10:13
2# 601997526
我已经使用code编辑过了,谢谢你的提醒!
你的解答很详细,对我很有帮助,谢谢!
作者: LWJ菜鸟 时间: 2011-6-27 10:34
在学习过程中,有关str:~!a!,1的解释,我在搜贴中看到了一个相关的讨论,新手可以进去看一下,很有帮助!
【原创】批处理字符截取心得,吐血总结出一口诀!
http://bbs.bathome.net/viewthrea ... hlight=%CD%C2%D1%AA
其中主要记住:m是偏移量,n指定要截取的长度。
这句话就好了!
我也是新手,希望大家互相帮助!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |