中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-05 18:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]有关random对文件重命名的问题 查看 821 回复 7
楼 主 [已解决]有关random对文件重命名的问题 发表于 2007-09-07 16:48 ·  中国 山西 太原 联通
中级用户
★★
积分 216
发帖 81
注册 2007-08-06 12:23
18年会员
UID 94721
性别 男
状态 离线
我想对当前目录下的文本文件进行随机的命名,可是遇到一个问题,只能对一个文本进行重命名,而其它的则不变
@echo off
set /a b=%random%%%100+1
for /r %%a in (*.txt) do (
set /a c=%random:~0,2%
ren %%~dpnsa.txt %c%.txt)
pause

[ Last edited by icyheart on 2007-9-7 at 06:27 PM ]
附件
1.jpg
Crossings must be my teacher
Modest progress can be
2 发表于 2007-09-07 16:51 ·  中国 北京 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
再FOR执行的时候%random:~0,2%的值已经固定了。
LZ可以把@echo off改成@echo on看看。
这时就需要用变量扩展延迟了。
3 发表于 2007-09-07 16:52 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
%random%也会产生一样的数值啊

重命名前,先判断,再命名
4 发表于 2007-09-07 17:01 ·  中国 北京 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
总之,要用变量扩展延迟!
%random%重复的可能性为1/32768.难道LZ的运气。。。
5 发表于 2007-09-07 17:05 ·  中国 山西 太原 联通
中级用户
★★
积分 216
发帖 81
注册 2007-08-06 12:23
18年会员
UID 94721
性别 男
状态 离线
要用变量延迟该怎么写呢

[ Last edited by icyheart on 2007-9-7 at 05:11 PM ]
Crossings must be my teacher
Modest progress can be
6 发表于 2007-09-07 17:05 ·  中国 山西 太原 联通
中级用户
★★
积分 216
发帖 81
注册 2007-08-06 12:23
18年会员
UID 94721
性别 男
状态 离线
@echo off
set /a b=%random%%%100+1
:start
for /r %%a in (*.txt) do (
set /a c=%random:~0,2%
if %%~na neq %c% (ren %%~dpnsa.txt %c%.txt) else goto start)
pause
这样也不行
Crossings must be my teacher
Modest progress can be
7 发表于 2007-09-07 18:21 ·  中国 北京 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
%~XX不叫变量扩展延迟..

@echo off
setlocal ENABLEDELAYEDEXPANSION
set /a b=%random%%%100+1
for /r %%a in (*.txt) do (
set /a c=!random:~0,2!
ren %%~dpnsa.txt !c!.txt)
pause
8 发表于 2007-09-07 18:26 ·  中国 山西 太原 联通
中级用户
★★
积分 216
发帖 81
注册 2007-08-06 12:23
18年会员
UID 94721
性别 男
状态 离线
想出来啦这样的应该是
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /r %%a in (*.txt) do (
set c=!random!
ren %%~dpnsa.txt !c!.txt)
pause
Crossings must be my teacher
Modest progress can be
论坛跳转: