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

[文件操作] 为何批处理中%random%每次产生的随机数字每次都一样?

全部代码在下面,经过测试发现,%random%产生的随机数每次都一样(关闭Cmd后再开就更新一个新数),导致不能重命名,高手帮我看看哪里出了问题!
  1. @echo off&setlocal enabledelayedexpansion
  2. echo ------------------------------------------------------
  3. echo 保存今天打印机的缓存文件并根据内容的第一个词改名
  4. echo ------------------------------------------------------
  5. ::建立今天日期文件夹
  6. set /a today=%date:~0,4%%date:~5,2%%date:~8,2%
  7. if not exist %today% md %today%
  8. ::将今天的打印机缓存文件备份到日期文件夹下
  9. xcopy /D:%date:~5,2%-%date:~8,2%-%date:~0,4% C:\WINDOWS\system32\spool\PRINTERS\*.SPL %today%\
  10. md temp
  11. ::遍历所有SPL文件
  12. for /r "%today%\" %%i in (*.SPL) do (
  13. ::复制一个SPL到临时文件夹下
  14. copy /y %%i temp\aaaaa.SPL
  15. ::对于开头有空行的文档将去除空行的aaaaa.SPL输出到bbbbb.SPL
  16. for /f "delims=" %%i in (temp\aaaaa.SPL) do >>temp\bbbbb.SPL echo %%i
  17. ::得到bbbbb.SPL的第一行内容,输出到temp.txt
  18. for /f "tokens=1* delims=:" %%i in ('findstr/n . temp\bbbbb.SPL') do if %%i geq 1 if %%i leq 1 echo %%j>>temp.txt
  19. ::将temp.txt的内容取第一个字符串,并改名aaaaa.SPL为这个字符串
  20. for /f "usebackq delims= " %%k in (temp.txt) do (
  21. ::如果有重名就在后面加一个随机数
  22. if exist temp\%%k.SPL (ren temp\aaaaa.SPL %%k%RANDOM%.SPL) else (ren temp\aaaaa.SPL %%k.SPL)
  23. )
  24. del /q temp\bbbbb.SPL
  25. del /q temp.txt
  26. )
  27. pause
复制代码

用!random!试试

TOP

回复 2# Seder


    用!random!的确可以了 但是又出现新问题 就是有一部分在执行的时候显示存在相同文件不能重命名

TOP

那就再随机,直到没有重复的~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 4# cjiabing


    用%random%的话,每次都是一个相同的数字.导致第一次重命名成功,但是第二次就失败了!
    用!random!可以重命名,会产生不同的数字,但是测试中发现,有30%的几率会导致某些文件重命名失败,每次都是那几个文件,仔细分析文件,没有发现什么不同的地方!困惑不已啊!

TOP

返回列表