Batch file 写入文件时回显输出
当我使用此代码从列表中选择一个字符时,它工作正常,但当我使用以下命令将其写入文件时:Batch file 写入文件时回显输出,batch-file,random,echo,Batch File,Random,Echo,当我使用此代码从列表中选择一个字符时,它工作正常,但当我使用以下命令将其写入文件时: echo %pwd%>>pwd.gen 有时会在生成的字符串中间随机放置“ECHO”一词。以下是一个例子: jUrkunjcxC ecRECHOsI5w0T DmJfat13fT UWXOysW7Gb pPmS7138Ve nFkh32ECHOJd1 您可以看到它出现在第2行和第6行中。这只发生在大约20%的时间里 代码如下: @echo off title Password Generator
echo %pwd%>>pwd.gen
有时会在生成的字符串中间随机放置“ECHO”一词。以下是一个例子:
jUrkunjcxC ecRECHOsI5w0T DmJfat13fT UWXOysW7Gb pPmS7138Ve nFkh32ECHOJd1 您可以看到它出现在第2行和第6行中。这只发生在大约20%的时间里 代码如下:@echo off
title Password Generator
color f0
:firstRun
set /a cnt=0
cls
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set /p Len=What length should the password be?
set /a Len=%Len%-1
cls
set /p Amt=How many would you like to generate?
cls
goto start
:start
set alfanum=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
set pwd=
FOR /L %%b IN (0, 1, %Len%) DO (
SET /A rnd_num=!RANDOM! * 62 / 32768 + 1
for /F %%c in ('echo %%alfanum:~!rnd_num!^,1%%') do set pwd=!pwd!%%c
)
echo %pwd%>> pwd.gen
set /a cnt=%cnt%+1
if %cnt%==%Amt% goto end
goto start
:end
cls
echo Done!
echo Results have been saved to "pwd.gen"
echo.
choice /c YN /m "Restart?"
if %errorlevel%==1 goto firstRun
这是两件事的结合。虽然我不完全清楚整个事情的内部运作,但我知道是什么导致了它,以及如何修复它
abcdefghijklmnopqrstuvwxyzabefghijklmnopqrstuvxyz012456789
长度为62个字符。但是,批处理中的子字符串以0开头,因此有效数字从0到61。无论出于何种原因,索引与'echo%%alfanum:~中的^
组合超出范围!数量,1%%'
导致显示单词ECHO
为了解决这个问题,在计算rnd_num时,不要加1
SET /A rnd_num=!RANDOM! * 62 / 32768
- alfanum的长度为26+26+10=62个字符
- RANDOM给出0-32767之间的随机数
- 当RANDOM高于32240时,
设置为62rnd_num
- 字符串索引从0开始,而不是从1开始
- for
命令索引/F%%c
,这是一个空字符串alfanum:~62,1~
- 它调用
,不带任何参数,该参数打印echo
而不是返回单个字符echo处于启用状态。
默认使用空格分隔符分割字符串,分隔出第一个单词for/F
变成%%c
ECHO
- 您将
添加到密码中ECHO
:start
set alfanum=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
set pwd=
FOR /L %%b IN (0, 1, %Len%) DO (
SET /A rnd_num=!RANDOM! * 62 / 32768 + 1
for /F %%c in ('echo %%alfanum:~!rnd_num!^,1%%') do set pwd=!pwd!%%c
)