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

[文本处理] 文件名乱序排列批处理如何写(部分解决了)?

[复制链接]
发表于 2021-5-24 21:39:31 | 显示全部楼层
10000是没问题的,不过效率明显下降。
发表于 2021-5-24 22:00:25 | 显示全部楼层
这里面有没有你需要的http://www.bathome.net/viewthread.php?tid=55180
 楼主| 发表于 2021-5-25 10:14:27 | 显示全部楼层
回复 17# went

我想参考这个链接的代码修改,

@echo off
set "max=100"
set "min=40"
set "n=20"
set /a "a=%random%%%(%max%-%min%+1)+%min%"
echo %a%>random.txt
pause

随机数是产生了,问题是如何记录随机数字已经被使用过了。
40~100的随机数字,不重复,不遗漏。
我不知道如何利用上面的模版进行修改?
发表于 2021-5-25 11:12:17 | 显示全部楼层
回复 18# netdzb
参考13楼代码就行了,数字不大,效率就不是问题了。
 楼主| 发表于 2021-5-25 11:34:39 | 显示全部楼层
回复 19# qixiaobin0715

13楼的代码报错,测试文件都在网盘附件上面。
https://javame.lanzoui.com/iVnqFpg5vtg

%%a in (`set _`)  批处理也有linux的用法吗?
发表于 2021-5-25 11:50:09 | 显示全部楼层
  1. @echo off

  2. for /f "usebackq delims=" %%a in (`dir /b *.txt`) do (
  3.     call :f "%%a"
  4. )
  5. for /f "usebackq tokens=2 delims==" %%a in (`set _`) do (
  6.     echo %%a
  7. )

  8. goto :END

  9. :f
  10. set n=%random%
  11. if defined _%n% goto :f
  12. set _%n%=%~1
  13. goto :eof

  14. :END
复制代码
拼写错误。。。。
发表于 2021-5-25 11:52:22 | 显示全部楼层
回复 20# netdzb


    set _ 输出 _开头的变量
 楼主| 发表于 2021-5-25 12:02:57 | 显示全部楼层
回复 21# newswan

xls006.txt
xls003.txt
xls007.txt
xls002.txt
xls009.txt
xls004.txt
xls005.txt
xls001.txt
xls010.txt
xls008.txt
1

运行结果多了一个1,而且第2次运行会产生20多行数据。
发表于 2021-5-25 12:04:41 | 显示全部楼层
回复 18# netdzb

上面帖子里有现成的
  1. @echo off & cd /d "%~dp0"
  2. call :getSingleRandom 40 100 20
  3. echo 随机字符串:%randomStr%
  4. for %%i in (%randomStr%) do echo %%i
  5. pause&exit

  6. REM 方法:获取单一随机数 call :getSingleRandom 最小值 最大值 随机数个数
  7. :getSingleRandom
  8. set "n=%~3"
  9. set "randomStr= "
  10.         :loop
  11.         set /a "a=%random%%%(%~2-%~1+1)+%~1"
  12.         call set "newStr=%%randomStr:%a%=%%"
  13.         if "%newStr%" equ "%randomStr%" (
  14.                 set "randomStr=%randomStr% %a%"
  15.                 set /a "n-=1"
  16.         )
  17. if "%n%" neq "0" goto :loop
  18. goto :eof
复制代码
 楼主| 发表于 2021-5-25 12:27:37 | 显示全部楼层
回复 24# went

第2行改成下面的都是死机
call :getSingleRandom 1 100 98
call :getSingleRandom 1 100 99
call :getSingleRandom 1 100 100

=======================

call :getSingleRandom 1 100 90 可以通过。
发表于 2021-5-25 12:45:55 | 显示全部楼层
用数字测试可以。
  1. @echo off
  2. for /l %%a in (40,1,100) do (
  3.     call :f %%a
  4. )
  5. for /f "usebackq tokens=2 delims==" %%i in (`set #`) do (
  6.     echo %%i
  7. )
  8. pause
  9. goto :eof

  10. :f
  11. set n=%random%
  12. if defined #%n% goto :f
  13. set #%n%=%~1
  14. goto :eof
  15. pause
复制代码
发表于 2021-5-25 12:54:24 | 显示全部楼层
回复 23# netdzb


    下载你发的,已测试,没有问题
发表于 2021-5-25 12:56:00 | 显示全部楼层
1到10的随机排列
  1. @echo off
  2. setlocal enableDelayedExpansion

  3. rem 1..10
  4. for /l %%a in (1,1,10) do (
  5.     set _%%a=x%%a
  6. )
  7. echo   sequences
  8. for /l %%a in (1,1,10) do (
  9.     echo !_%%a!
  10. )

  11. rem 随机
  12. for /l %%a in (1,1,9) do (
  13.     call :f %%a 10
  14. )
  15. echo   random
  16. for /l %%a in (1,1,10) do (
  17.     echo !_%%a!
  18. )
  19. goto :END

  20. :f
  21. set /a n=%random%%%(%2-%1+1)+%1
  22. if %n%==%1 goto :eof
  23. set t=!_%n%!
  24. set _%n%=!_%1!
  25. set _%1=%t%
  26. goto :eof


  27. :END
复制代码
发表于 2021-5-25 12:58:48 | 显示全部楼层
我觉得你可以用powershell,win7也支持
  1. powershell -c "40..100 | Sort-Object {return Get-Random}"
复制代码
发表于 2021-5-25 13:01:21 | 显示全部楼层
只取10个
  1. powershell -c "40..100 | Sort-Object {return Get-Random} | Select-Object -First 10"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 17:36 , Processed in 0.030582 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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