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

[文本处理] [已解决]求查错,生成数个单字母文件名的批处理

本帖最后由 BHsolve 于 2014-1-15 09:43 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set eng=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
  4. set /p num=生成文件个数(个数^=^<52):
  5. :begin
  6. set /a num-=1
  7. for /l %%i in (0,1,%num%) do (
  8. set /a a=!random!%%52
  9. if defined _!a! set /a num+=1&goto begin
  10. set "text=!eng:~%a%,1!"
  11. echo >nul 2> !text!.txt
  12. set "_!a!=!a!"&goto begin
  13. )
  14. pause > nul
复制代码
生成的文件数比输入的文件数少,求查错
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 terse 于 2014-1-14 13:37 编辑

大小写文件名实际上一个文件吧

TOP

本帖最后由 BHsolve 于 2014-1-14 14:05 编辑

回复 2# terse


   修改完之后生成的文件数与输入数还是不一致。
我将大写的全部去掉,都用小写的。52改为26还是不行

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set eng=abcdefghijklmnopqrstuvwxyz
  4. set /p num=生成文件个数(个数^=^<26):
  5. :begin
  6. if !num! gtr 26 (
  7.     echo 输入错误
  8.     goto end
  9. ) else if !num! lss 1 (
  10.     goto end
  11. )
  12. set /a a=!random!%%26
  13. if defined _!a! (
  14.     goto begin
  15. )
  16. set "text=!eng:~%a%,1!"
  17. type nul > !text!.txt
  18. set "_!a!=!a!"
  19. set /a num-=1
  20. goto begin
  21. :end
  22. pause
复制代码
1

评分人数

TOP

回复 4# DAIC


    set "_!a!=!a!" 能解释下SET 语句加上双引号是什么意思吗?
学习中

TOP

回复 5# battab


    防止遇到特殊字符的时候出错

TOP

回复 6# DAIC


    谢谢解说!明白了。
学习中

TOP

回复 4# DAIC


    我感觉我的跟你差不多,为什么会不行呢?

TOP

回复 8# BHsolve


差的很多
你的是用for和goto两个循环来控制个数,逻辑错误。

TOP

回复 9# DAIC


    逻辑错误是指哪儿?
    按照我上面的代码本来不是应该也可以实现吗?
    为什么会出现错误呢?

TOP

回复 10# BHsolve


    在for中给变量赋值,并引用其值,用!代替%
你的%a%怎么回事?
可以用call set "text=%%eng:~!a!,1%%"
用for更好 for %%i in (!a!) do set "text =!eng:~%%i,1!"
1

评分人数

TOP

回复 11# apang


    厉害啊,我查了一个上午的错都没发现。真是一言惊醒梦中人啊。
call set "text=%%eng:~!a!,1%%"

  原来%%和!可以一起用啊,学习了,学习了。
不过两者之间有速度关系吗?

TOP

回复 10# BHsolve


假如用户输入3,程序是怎样一步一步执行的,你写在纸上试试看。

TOP

回复 13# DAIC


    我想我已经知道问题出在哪里了,是变量延迟的问题吧。
第一次执行,a被赋值。但是变量截取中,我用的是%a%,没有启动变量延迟%a%没有任何值,截取的就一定是第一个字符。(怪不的每次都有a.txt)
第二次执行,如果a被赋不同值。判定是否相同就可以通过,%a%的值为上一个赋的值。(无论相不相同,%a%值都为上一个值)
第三次执行,如果a被赋予不同值,或与上一个相同值都会产生不同的文本文档。但与上上一个相同时就会重复。

现在,我是彻底明白了。

TOP

返回列表