Board logo

标题: [文件操作] 随机生成文件的批处理中set命令如何理解? [打印本页]

作者: LWJ菜鸟    时间: 2011-6-23 13:27     标题: 随机生成文件的批处理中set命令如何理解?

本帖最后由 LWJ菜鸟 于 2011-6-27 10:11 编辑

在看帖的时候看到了一段代码,如下:生成一个test文件夹,并在该文件夹下随机生成一系列文件的代码。这句:set "var=!var!%%str:~!a!,1%%"我看不懂,是什么意思?希望可以得到详细点的解答
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=abcdefghijklmnopqrstuvwxyz0123456789"
  3. set "code=jpg txt bat exe wma mp3"
  4. md test&cd test
  5. for /l %%a in (1,1,20) do (
  6.     for /l %%b in (1,1,9) do (
  7.           set /a a=!random!%%36
  8.           call,set "var=!var!%%str:~!a!,1%%"
  9.      )
  10.     set /a b=!random!%%5+1&call :lp
  11.     set "var="
  12. )
  13. goto :eof
  14. :lp
  15. 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