标题: [文本处理] [已解决]求查错,生成数个单字母文件名的批处理 [打印本页]
作者: BHsolve 时间: 2014-1-14 12:37 标题: [已解决]求查错,生成数个单字母文件名的批处理
本帖最后由 BHsolve 于 2014-1-15 09:43 编辑
- @echo off
- setlocal enabledelayedexpansion
- set eng=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- set /p num=生成文件个数(个数^=^<52):
- :begin
- set /a num-=1
- for /l %%i in (0,1,%num%) do (
- set /a a=!random!%%52
- if defined _!a! set /a num+=1&goto begin
- set "text=!eng:~%a%,1!"
- echo >nul 2> !text!.txt
- set "_!a!=!a!"&goto begin
- )
- pause > nul
复制代码
生成的文件数比输入的文件数少,求查错
作者: terse 时间: 2014-1-14 13:31
本帖最后由 terse 于 2014-1-14 13:37 编辑
大小写文件名实际上一个文件吧
作者: BHsolve 时间: 2014-1-14 13:54
本帖最后由 BHsolve 于 2014-1-14 14:05 编辑
回复 2# terse
修改完之后生成的文件数与输入数还是不一致。
我将大写的全部去掉,都用小写的。52改为26还是不行
作者: DAIC 时间: 2014-1-14 14:33
- @echo off
- setlocal enabledelayedexpansion
- set eng=abcdefghijklmnopqrstuvwxyz
- set /p num=生成文件个数(个数^=^<26):
- :begin
- if !num! gtr 26 (
- echo 输入错误
- goto end
- ) else if !num! lss 1 (
- goto end
- )
- set /a a=!random!%%26
- if defined _!a! (
- goto begin
- )
- set "text=!eng:~%a%,1!"
- type nul > !text!.txt
- set "_!a!=!a!"
- set /a num-=1
- goto begin
-
- :end
- pause
复制代码
作者: battab 时间: 2014-1-14 15:01
回复 4# DAIC
set "_!a!=!a!" 能解释下SET 语句加上双引号是什么意思吗?
作者: DAIC 时间: 2014-1-14 15:04
回复 5# battab
防止遇到特殊字符的时候出错
作者: battab 时间: 2014-1-14 15:16
回复 6# DAIC
谢谢解说!明白了。
作者: BHsolve 时间: 2014-1-14 16:21
回复 4# DAIC
我感觉我的跟你差不多,为什么会不行呢?
作者: DAIC 时间: 2014-1-14 16:46
回复 8# BHsolve
差的很多
你的是用for和goto两个循环来控制个数,逻辑错误。
作者: BHsolve 时间: 2014-1-14 20:31
回复 9# DAIC
逻辑错误是指哪儿?
按照我上面的代码本来不是应该也可以实现吗?
为什么会出现错误呢?
作者: apang 时间: 2014-1-14 20:54
回复 10# BHsolve
在for中给变量赋值,并引用其值,用!代替%
你的%a%怎么回事?
可以用call set "text=%%eng:~!a!,1%%"
用for更好 for %%i in (!a!) do set "text =!eng:~%%i,1!"
作者: BHsolve 时间: 2014-1-14 23:25
回复 11# apang
厉害啊,我查了一个上午的错都没发现。真是一言惊醒梦中人啊。
call set "text=%%eng:~!a!,1%%"
原来%%和!可以一起用啊,学习了,学习了。
不过两者之间有速度关系吗?
作者: DAIC 时间: 2014-1-15 08:39
回复 10# BHsolve
假如用户输入3,程序是怎样一步一步执行的,你写在纸上试试看。
作者: BHsolve 时间: 2014-1-15 09:42
回复 13# DAIC
我想我已经知道问题出在哪里了,是变量延迟的问题吧。
第一次执行,a被赋值。但是变量截取中,我用的是%a%,没有启动变量延迟%a%没有任何值,截取的就一定是第一个字符。(怪不的每次都有a.txt)
第二次执行,如果a被赋不同值。判定是否相同就可以通过,%a%的值为上一个赋的值。(无论相不相同,%a%值都为上一个值)
第三次执行,如果a被赋予不同值,或与上一个相同值都会产生不同的文本文档。但与上上一个相同时就会重复。
现在,我是彻底明白了。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |