【问题标题】:Why Does This Randomize String Batch Script Always Start With The First Letter From the Character List?为什么这个随机字符串批处理脚本总是从字符列表的第一个字母开始?
【发布时间】:2017-11-13 01:02:32
【问题描述】:

很遗憾,由于我的代表不够高,我无法将 cmets 添加到现有的 StackOverflow 文章中,因此我将在此处引用链接: runonce-to-rename-a-computername-with-a-random-name-on-reboot

为什么LotPings提供的批处理示例代码总是在随机生成的部分前面加上字符列表中的第一个字母,例如“A”?

示例代码:

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "Chars=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Call :RandChar 26 Name
For /L %%A in (1,1,14) Do Call :RandChar 62 Name
Echo %Name%
Goto :Eof
:RandChar Range Var
Set /A Pnt=%Random% %% %1 & Set %2=!%2!!Chars:~%Pnt%,1!

执行10次的结果:

AOyVq8olMi7kZaR
ANyU2MoAzZwTpwo
AYNXqJSGKXgyvca
AFGoCImfNOHuVSz
AHNhxnj9Wyqkqo3
AML6hTrSHK4TFut
AHuinBZCWr5D5NZ
AQYNtXaYMXRdGOb
ARWYXn7YNMQ0cmm
APHdWggSQl5KUhA

如何修改代码以使起始字符也随机化?

【问题讨论】:

  • 没有测试任何东西,我会先发制人地责怪延迟扩展,因为这通常是批处理问题的根源。使用!random! 代替%random% 有效吗?
  • 不幸的是,结果似乎是一样的。我生成了大约 15-20 个不同的值,它们仍然以 A 开头
  • 将最后一行的set %2 部分放在它自己的行上。当您使用 & 时,某些变量扩展不会起作用。
  • 天才!那行得通:D 谢谢

标签: batch-file


【解决方案1】:
Set /A Pnt=%Random% %% %1 & Set %2=!%2!!Chars:~%Pnt%,1!

应该是

Set /A Pnt=%Random% %% %1
Set %2=!%2!!Chars:~%Pnt%,1!

整个行被解析,然后被执行,在解析阶段,任何%var%都会被varat that time. Hence,pntwill be replaced by the value ofpntat the very start, yieldingSet %2的值替换=!%2!!Chars:~,1!` 之后它将被上一次调用中建立的值替换。

换行会强制两个语句顺序执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2021-01-22
    • 2022-08-06
    • 1970-01-01
    相关资源
    最近更新 更多