找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33865|回复: 13

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

[复制链接]
发表于 2014-1-14 12:37:42 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
生成的文件数比输入的文件数少,求查错

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-1-14 13:31:27 | 显示全部楼层
本帖最后由 terse 于 2014-1-14 13:37 编辑

大小写文件名实际上一个文件吧
 楼主| 发表于 2014-1-14 13:54:54 | 显示全部楼层
本帖最后由 BHsolve 于 2014-1-14 14:05 编辑

回复 2# terse


   修改完之后生成的文件数与输入数还是不一致。
我将大写的全部去掉,都用小写的。52改为26还是不行
发表于 2014-1-14 14:33:09 | 显示全部楼层
  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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2014-1-14 15:01:06 | 显示全部楼层
回复 4# DAIC


    set "_!a!=!a!" 能解释下SET 语句加上双引号是什么意思吗?
发表于 2014-1-14 15:04:27 | 显示全部楼层
回复 5# battab


    防止遇到特殊字符的时候出错
发表于 2014-1-14 15:16:13 | 显示全部楼层
回复 6# DAIC


    谢谢解说!明白了。
 楼主| 发表于 2014-1-14 16:21:58 | 显示全部楼层
回复 4# DAIC


    我感觉我的跟你差不多,为什么会不行呢?
发表于 2014-1-14 16:46:41 | 显示全部楼层
回复 8# BHsolve


差的很多
你的是用for和goto两个循环来控制个数,逻辑错误。
 楼主| 发表于 2014-1-14 20:31:39 | 显示全部楼层
回复 9# DAIC


    逻辑错误是指哪儿?
    按照我上面的代码本来不是应该也可以实现吗?
    为什么会出现错误呢?
发表于 2014-1-14 20:54:43 | 显示全部楼层
回复 10# BHsolve


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

评分

参与人数 1技术 +1 收起 理由
BHsolve + 1 %%和!同时使用

查看全部评分

 楼主| 发表于 2014-1-14 23:25:28 | 显示全部楼层
回复 11# apang


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

  原来%%和!可以一起用啊,学习了,学习了。
不过两者之间有速度关系吗?
发表于 2014-1-15 08:39:30 | 显示全部楼层
回复 10# BHsolve


假如用户输入3,程序是怎样一步一步执行的,你写在纸上试试看。
 楼主| 发表于 2014-1-15 09:42:45 | 显示全部楼层
回复 13# DAIC


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

现在,我是彻底明白了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 23:43 , Processed in 0.034468 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表