【问题标题】:my arithmetic expression doesnt work in a CMD FOR loop [duplicate]我的算术表达式在 CMD FOR 循环中不起作用 [重复]
【发布时间】:2023-03-03 15:51:01
【问题描述】:

我想在这样的 For 循环中生成一个随机数(部分):

FOR /F "delims=, eol=; tokens=1,2" %%a in (DATA.TXT) DO (   
    SET min=10000
    SET max=99999
    SET /a passwort=!min!+(!max!-!min!+1)*%random%/32768
)

不幸的是,它返回了这个错误:

“*[随机生成的数字]/32768”此时无法进行语法处理。

【问题讨论】:

标签: for-loop cmd arithmetic-expressions


【解决方案1】:
  • 它不起作用,因为 set /a 命令没有双引号,并且 (代码块)以未转义的关闭过早结束 公式中的括号。
  • 否则公式有可能产生负数的缺陷 由于先相乘而得到的数字
    (set /a 仅限于有符号的 32 位 整数数学)。
  • 同样在(代码块)内,它必须是!random!,而所有 其他变量不需要%/! 进行扩展(特殊设置/A)
  • 如果没有进一步的预防措施,这个范围内的数字密码不是很安全,
    但是您可以重复使用随机数从一组字符中生成任意长度的密码,例如this answer

:: Q:\Test\2018\07\10\SO_51271717.cmd
@Echo off & SetLocal EnableExtensions EnableDelayedExpansion

SET /A "min=10000,max=99999,range=max-min+1"

FOR /F "delims=, eol=; tokens=1,2" %%a in (DATA.TXT) DO (   
    SET /a "passwort=min + range / 32768* !random! "
    Echo passwort=!passwort!
)

样本输出:

> Q:\Test\2018\07\10\SO_51271717.cmd
passwort=10528
passwort=56868
passwort=34042
passwort=40878
passwort=32590
passwort=47396
passwort=51676
passwort=66530
passwort=40106
passwort=56218

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2021-01-03
    • 2014-11-03
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多