Board logo

标题: [文本处理] [已解决]批处理怎样任意选出文件夹中的一个文件将其重命名? [打印本页]

作者: mini123778    时间: 2010-8-13 10:32     标题: [已解决]批处理怎样任意选出文件夹中的一个文件将其重命名?

如题!具体情况是这样的。
在一个文件夹下面有大量的视频文件,都是.mpg格式的,它们的文件名没有特定的规律。
现在我想在一个指定的时间,比如说是60秒,随机抽取某个视频文件重命名为指定的文件名evideo.mpg,而其他的文件名保持原样,然后经过60秒后又从这里面随机抽取一个视频文件重命名为evideo.mpg,当然之前的那个evideo.mpg肯定要先改成其他的名称。

也就是说在特定的时间内这个文件夹里总保持着一个文件的名称为evideo.mpg,不过是随机的一个文件,然后在指定时间过后自动变为另外一个文件名称为evideo.mpg。

请教高手了。谢谢。小弟批处理功底不行啊。

[ 本帖最后由 mini123778 于 2010-8-16 10:58 编辑 ]
作者: FOR    时间: 2010-8-13 11:54

  1. @echo off
  2. for %%i in (*.mpg) do (
  3.    set /a n+=1
  4.    call set "#%%n%%=%%i"
  5. )
  6. :b1
  7. setlocal enabledelayedexpansion
  8. set /a i=!random!%%n+1
  9. if "!#%i%!"=="evideo.mpg" endlocal&goto b1
  10. if exist "evideo.mpg" (
  11.    ren "evideo.mpg" "evideo.mpg_!#%i%!"
  12.    ren "!#%i%!" "evideo.mpg"
  13.    ren "evideo.mpg_!#%i%!" "!#%i%!"
  14.    ) else (
  15.      ren "!#%i%!" "evideo.mpg"
  16. )
  17. endlocal
  18. ping/n 60 127.1 >nul
  19. goto b1
复制代码

作者: mini123778    时间: 2010-8-13 12:18

2楼的代码我试了一下,它只改了一次以后就不变了啊。
作者: mini123778    时间: 2010-8-13 12:23     标题: 回复 2楼 的帖子

好像是在存在该文件名的时候就不会再变了。
作者: sgaizxt001    时间: 2010-8-13 13:18

修改了一下2楼的代码,不知道 可以不
  1. @echo off
  2. :b1
  3. for %%i in (*.mpg) do (
  4.    set /a n+=1
  5.    call set "#%%n%%=%%i"
  6. )
  7. setlocal enabledelayedexpansion
  8. set /a i=!random!%%n+1
  9. if "!#%i%!"=="evideo.mpg" endlocal&goto b1
  10. if exist evideo.mpg ren evideo.mpg "!random:~0,5!.mpg"
  11. ren "!#%i%!" "evideo.mpg"
  12. endlocal
  13. ping/n 60 127.1 >nul
  14. goto b1
复制代码

作者: mini123778    时间: 2010-8-13 13:26     标题: 回复 5楼 的帖子

不行啊。。第一次的时候可以改,第二次的时候那个evideo还在,可是把其他某个给改了名字变成一个数字的文件名。
作者: sgaizxt001    时间: 2010-8-13 15:14

evideo是肯定还在的,你不是让他总保持着一个文件的名称为evideo.mpg?
作者: mini123778    时间: 2010-8-13 16:50     标题: 回复 7楼 的帖子

但是上面的代码始终是同一个文件叫evideo,没有变成其他的文件。
作者: FOR    时间: 2010-8-13 17:57

回复楼主:
请认真测试别人给你写的代码,这是对别人最起码的尊重
不要嘴巴一张,一句不行就等别人去给你查错。。。
经仔细检查2楼代码流程及语句,并没有发现错误

为对自己说的话负责还是作了以下测试
把mpg文件改为txt文件,把延时改为打开evideo.txt文件,
结果每次打开的evideo.txt内容都不同。
测试证明2楼代码没问题。
作者: TX_kakashi    时间: 2010-8-13 21:01

猜测lz是一直在播放着一个evideo吧,这样的话在cmd里是命令执行会失败,因为原来的evideo一直被占用着,可以把原来批处理里的ren替换成replace.
作者: mini123778    时间: 2010-8-16 09:19     标题: 回复 10楼 的帖子

是啊,这台做服务器的,其他机子从这台读取进行播放,我是要让客户端一段时间播放的就变换一次。
作者: mini123778    时间: 2010-8-16 09:20     标题: 回复 9楼 的帖子

我的确是有在测试,不知道视频和文本文件是否会有差别,我没用文本试过,但是用视频文件的确不行。
作者: mini123778    时间: 2010-8-16 10:57

楼上的真不好意思,2楼的代码是OK的。上周测的时候估计是眼睛看花了。

真不好意思啊。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2