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

[文件操作] 随机生成文件的批处理中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
复制代码
1

评分人数

    • batman: 请用code标签将代码括起来PB -2

在学习过程中,有关str:~!a!,1的解释,我在搜贴中看到了一个相关的讨论,新手可以进去看一下,很有帮助!
【原创】批处理字符截取心得,吐血总结出一口诀!
http://bbs.bathome.net/viewthrea ... hlight=%CD%C2%D1%AA
其中主要记住:m是偏移量,n指定要截取的长度。
这句话就好了!
我也是新手,希望大家互相帮助!

TOP

2# 601997526
我已经使用code编辑过了,谢谢你的提醒!
你的解答很详细,对我很有帮助,谢谢!

TOP

本帖最后由 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括起来的,但是发现括起来就没有颜色显示了,所以最后就没有括起来了,再说我这复制了也运行不了
2

评分人数

    • LWJ菜鸟: 讲的很详细,非常感谢!技术 + 1
    • batman: 乐于助人技术 + 1

TOP

返回列表