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

[文本处理] [已解决]三个随机数文本的行字符,组合为名字的批处理?

1.txt
复制代码
2.txt
复制代码
3.txt
复制代码
抄写的77七批处理
http://www.bathome.net/viewthread.php?tid=66385&highlight=
早晨.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('type "早晨.txt"') do (
  4. set /a n+=1
  5. set "#!n!=%%a"
  6. )
  7. set /a m=%random% %% %n% + 1
  8. echo !#%m%!
  9. endlocal
  10. pause
复制代码
改为
姓名.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :0
  4. for /f "delims=" %%a in ('type "1.txt"') do (
  5. for /f "delims=" %%b in ('type "2.txt"') do (
  6. for /f "delims=" %%c in ('type "3.txt"') do (
  7. set /a n+=1
  8. set "#!n!=%%a%%b%%c"
  9. )))
  10. set /a m=%random% %% %n% + 1
  11. echo !#%m%!
  12. pause
  13. goto:0
  14. endlocal
  15. pause
  16. 孙立国
  17. 请按任意键继续. . .
  18. 孙建家
  19. 请按任意键继续. . .
  20. 赵立星
  21. 请按任意键继续. . .
复制代码
但是这种随机叠加的批处理太慢了,求加快速度的批处理。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 aloha20200628 于 2025-4-18 21:18 编辑

回复 1# zzz19760225
  1. @echo off &setlocal enabledelayedexpansion
  2. set "n1=0" &for /f "delims=" %%v in (1.txt) do set/a "n1+=1"&set "_1!n1!=%%v"
  3. set "n2=0" &for /f "delims=" %%v in (2.txt) do set/a "n2+=1"&set "_2!n2!=%%v"
  4. set "n3=0" &for /f "delims=" %%v in (3.txt) do set/a "n3+=1"&set "_3!n3!=%%v"
  5. :#loop#
  6.    set/a a=!random!%%!n1!+1
  7.    set/a b=!random!%%!n2!+1
  8.    set/a c=!random!%%!n3!+1
  9.    echo,!_1%a%!!_2%b%!!_3%c%!
  10.    set/p "loop=直接回车键》下一个 其余键》退出:"
  11.    if defined loop (exit/b) else (goto #loop#)
复制代码
1

评分人数

    • zzz19760225: 多谢,这种还方便增减单元。技术 + 1

TOP

将第3行的
:0
移到第9行的
)))
之后 ,这样就不用每次goto都读取并设置了
1

评分人数

    • zzz19760225: 可行,开始一个慢全读取,后面就正常了。技术 + 1

TOP

本帖最后由 zzz19760225 于 2025-4-18 20:04 编辑

感谢两位解答。
请问,如果要调用的话,需要怎么写啊
我这写的不能正常运行,用通义问的结果也无法正常运行,都是系统找不到for开始三个字。
  1. @echo off
  2. :0
  3. set /p nc=:
  4. if exist %nc% (set a=%nc%) else (call:1)
  5. echo:%a%
  6. goto:0
  7. pause&exit
  8. :1
  9. setlocal enabledelayedexpansion
  10. set "n1=1" &for /f "delims=," %%v in (张,王,赵,李,钱) do set/a "n1+=1"&set "_1!n1!=%%v"
  11. set "n2=1" &for /f "delims=," %%v in (中,华,富,强) do set/a "n2+=1"&set "_2!n2!=%%v"
  12. set "n3=1" &for /f "delims=," %%v in (万,世,太,平) do set/a "n3+=1"&set "_3!n3!=%%v"
  13.    set/a a=%random%%%!n1!+1
  14.    set/a b=%random%%%!n2!+1
  15.    set/a c=%random%%%!n3!+1
  16.    set z=!_1%a%!!_2%b%!!_3%c%!
  17. set a=!z!
  18. exit/b
  19. :1
  20. 系统找不到文件 张。
  21. 系统找不到文件 中。
  22. 系统找不到文件 万。
  23. :
复制代码

TOP

本帖最后由 aloha20200628 于 2025-4-18 21:27 编辑

回复 4# zzz19760225

参考以下版本修正你的4楼代码...
  1. @echo off &setlocal enabledelayedexpansion
  2. :#l1
  3. call :#l2
  4. echo,!z!
  5. set/p "loop=直接回车键》下一个 其余键》退出:"
  6. if defined loop (exit/b) else (goto #l1)
  7. :#l2
  8. set "n1=0" &for %%v in (张,王,赵,李,钱) do set/a "n1+=1"&set "_1!n1!=%%v"
  9. set "n2=0" &for %%v in (中,华,富,强) do set/a "n2+=1"&set "_2!n2!=%%v"
  10. set "n3=0" &for %%v in (万,世,太,平) do set/a "n3+=1"&set "_3!n3!=%%v"
  11. set/a a=!random!%%!n1!+1
  12. set/a b=!random!%%!n2!+1
  13. set/a c=!random!%%!n3!+1
  14. set "z=!_1%a%!!_2%b%!!_3%c%!"
  15. exit/b
复制代码
1

评分人数

    • zzz19760225: 感谢,可以调用。我明天试试标签里装变量延 ...技术 + 1

TOP

本帖最后由 zzz19760225 于 2025-4-19 16:10 编辑

回复 5# aloha20200628
  1. @echo off
  2. set a=1
  3. echo:1:%a%
  4. setlocal enabledelayedexpansion
  5. set a=2
  6. echo:2:!a!
  7. endlocal
  8. echo:3:!a!
  9. echo:4:%a%
  10. pause&exit
  11. 1:1
  12. 2:2
  13. 3:!a!
  14. 4:1
  15. 请按任意键继续. . .
复制代码
请问大佬,变量延迟的局部变量值echo:2:!a!,如何转化为全局环境变量值呢?

TOP

本帖最后由 aloha20200628 于 2025-4-19 16:59 编辑

回复 6# zzz19760225

运行以下版本可体会 ‘!var!变量如何续命给%var%变量’ ...
  1. @echo off
  2. set a=1
  3. echo,1:a=%a%
  4. setlocal enabledelayedexpansion
  5. set a=2
  6. echo,2:a=!a!,%a%
  7. endlocal &set b=%a%
  8. echo,4:a=%a%,b=%b%
  9. pause&exit/b
复制代码
1

评分人数

TOP

返回列表