Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 我需要批处理的帮助&引用;命令的语法不正确";_Batch File - Fatal编程技术网

Batch file 我需要批处理的帮助&引用;命令的语法不正确";

Batch file 我需要批处理的帮助&引用;命令的语法不正确";,batch-file,Batch File,我找不到这个问题的解决方案,而stackoverflow是我认为我能找到解决方案的唯一地方。我正在创建一个批处理程序来生成一个随机密码。我希望它有一个随机数的字符和随机字母。这是我用来生成它的脚本- set /a rchar=%RANDOM%*8/32768+16 :chargen set /a charnum=%RANDOM%*36/32768+1 if %charnum%==1 set char='a' if %charnum%==2 set char='b' if %charnum%==3

我找不到这个问题的解决方案,而stackoverflow是我认为我能找到解决方案的唯一地方。我正在创建一个批处理程序来生成一个随机密码。我希望它有一个随机数的字符和随机字母。这是我用来生成它的脚本-

set /a rchar=%RANDOM%*8/32768+16
:chargen
set /a charnum=%RANDOM%*36/32768+1
if %charnum%==1 set char='a'
if %charnum%==2 set char='b'
if %charnum%==3 set char='c'
if %charnum%==4 set char='d'
if %charnum%==5 set char='e'
if %charnum%==6 set char='f'
if %charnum%==7 set char='g'
if %charnum%==8 set char='h'
if %charnum%==9 set char='i'
if %charnum%==10 set char='j'
if %charnum%==11 set char='k'
if %charnum%==12 set char='l'
if %charnum%==13 set char='m'
if %charnum%==14 set char='n'
if %charnum%==15 set char='o'
if %charnum%==16 set char='p'
if %charnum%==17 set char='q'
if %charnum%==18 set char='r'
if %charnum%==19 set char='s'
if %charnum%==20 set char='t'
if %charnum%==21 set char='u'
if %charnum%==22 set char='v'
if %charnum%==23 set char='w'
if %charnum%==24 set char='x'
if %charnum%==25 set char='y'
if %charnum%==26 set char='z'
if %charnum%==27 set char='0'
if %charnum%==28 set char='1'
if %charnum%==29 set char='2'
if %charnum%==30 set char='3'
if %charnum%==31 set char='4'
if %charnum%==32 set char='5'
if %charnum%==33 set char='6'
if %charnum%==34 set char='7'
if %charnum%==35 set char='8'
if %charnum%==36 set char='9'
set %char%=%ipassword%
set %fpassword%=%ipassword%%fpassword%
set /a rchar=%rchar%-1
if %rchar%==0 goto :passworddone
goto :chargen

当我试图运行它时,我一直得到“这个错误的语法不正确”。有没有人对解决方案有什么想法?非常感谢!谢谢大家!

首先,不要在
set
语句的左侧使用
%
标记。比如:

set fpassword=xyzzy
set %fpassword%=plugh
@setlocal
@echo off
set /a count = %RANDOM% * 36 / 32768 + 1
set charlist=abcdefghijklmnopqrstuvwxyz0123456789
set password=
:while1
    set /a index = %RANDOM% * 36 / 32768
    call set char=%%charlist:~%index%,1%%
    set password=%password%%char%
    set /a count = %count% - 1
    if %count% gtr 0 goto :while1

echo %password%
endlocal
xyzy
变量设置为
plugh
,这是一种间接寻址形式

应该是:

set fpassword=plugh

第二,在
cmd
(通常只允许常量)中,有一种相当简洁(尽管很复杂)的方法,可以使用可变偏移量和长度的子字符串,因此不需要所有那些
if
语句

技巧是调用
set
作为子函数。以下脚本:

@echo off
set string=abcdefgh
set ofs=2
set len=3
rem Here be dragons :-)
call set result=%%string:~%ofs%,%len%%%
echo %result%
显示此操作并将输出:

cde
请记住,这是一种零偏移方法,因此在选择用作索引的随机值时,您不希望将
1
添加到变量中


最后,您的变量操作似乎有点不对劲,因为您(例如)正在尝试再次设置
char
,而不管选择的随机值是多少,并且还使用
ipassword
fpassword
执行一些痛苦的操作


考虑到所有这些因素,脚本可以更好地编写为:

set fpassword=xyzzy
set %fpassword%=plugh
@setlocal
@echo off
set /a count = %RANDOM% * 36 / 32768 + 1
set charlist=abcdefghijklmnopqrstuvwxyz0123456789
set password=
:while1
    set /a index = %RANDOM% * 36 / 32768
    call set char=%%charlist:~%index%,1%%
    set password=%password%%char%
    set /a count = %count% - 1
    if %count% gtr 0 goto :while1

echo %password%
endlocal

另一件你可能要考虑的是密码长度。一个字符的密码是一个非常糟糕的主意,我不确定是否有人会记住36个字符的密码。密码长度最好为(例如)8到12,包括:

set /a count = %RANDOM% %% 5 + 8
(是的,
%%
是模运算符-您可以使用它代替乘法/除法操作)