繁体   English   中英

批处理文件净使用,用于变量if的输出

[英]batch file net use with for output for variable if

我有用于在Windows中使用批处理文件映射驱动器的代码,我使用nik和password之类的参数。 然后,如果用户和密码匹配,程序将给出输出“成功”,否则程序将给出输出“某些错误”。 我通过使用FOR DO和FIND的网络使用获得了输出成功的参数和一些错误

@MC ND

这里

:MENU
Title MyTitle
@ECHO OFF
@ECHO OFF

Echo --------------- MENU -----------------------
Echo 1. Press 1 for start or reload program.
Echo 2. Press 0 for exit.

Echo Choose :
SET /p tekan=
IF %tekan%==0 GOTO EXIT
IF %tekan%==1 GOTO FORM_QMR

:FORM_QMR
Echo ---------- Fill this Form (%userdomain%) ----------
SET /p nik="Insert Your ID :"
SET /p passwd="Insert Your Password :"
GOTO CREDENTIAL_ACTION

IF %userdomain% == DOMAIN GOTO CREDENTIAL_ACTION_FOR_USER_WITH_DOMAIN
IF NOT %userdomain% == DOMAIN GOTO CREDENTIAL_ACTION_FOR_USER_WITHOUT_DOMAIN

:CREDENTIAL_ACTION_FOR_USER_WITH_DOMAIN
FOR /F %%H IN ('NET USE "\\myserver\Path01\Path02" /User:domain\%nik% %passwd% 2^>^&1 ^| Find /I "System error 1326 has occurred."') DO SET "ACTSTATUS=BAD"
IF %ACTSTATUS%==BAD
(
Echo "Some error found, please contact administrator."
GOTO FORM_QMR
)
IF NOT %ACTSTATUS%==BAD
(
Echo "Success."
)

:CREDENTIAL_ACTION_FOR_USER_WITHOUT_DOMAIN
FOR /F %%H IN ('NET USE "\\192.168.1.1\Path01\Path02" /User:domain\%nik% %passwd% 2^>^&1 ^| Find /I "System error 1326 has occurred."') DO SET "ACTSTATUS=BAD"
IF %ACTSTATUS%==BAD
(
Echo "Some error found, please contact administrator."
GOTO FORM_QMR
)
IF NOT %ACTSTATUS%==BAD(
Echo "Success."
)

:EXIT
exit

我的问题是在插入密码后,程序总是发送输出“命令的语法不正确”

谁能帮我..

以下代码段中纠正了一些错误(如有必要,请注明):

:FORM_QMR
Echo ---------- Fill this Form (%userdomain%) ----------
SET /p nik="Insert Your ID :"
SET /p passwd="Insert Your Password :"
rem      CREDENTIAL_ACTION label not found
rem GOTO CREDENTIAL_ACTION

SET "ACTSTATUS=BAD"
IF %userdomain% == DOMAIN ( 
     GOTO CREDENTIAL_ACTION_FOR_USER_WITH_DOMAIN
) else (
     GOTO CREDENTIAL_ACTION_FOR_USER_WITHOUT_DOMAIN
)

:CREDENTIAL_ACTION_FOR_USER_WITH_DOMAIN
rem note double quoted password and "delims=" option
FOR /F "delims=" %%H IN ('
  NET USE "\\myserver\Path01\Path02" /User:domain\%nik% "%passwd%" 2^>NUL ^| Find /I "The command completed successfully"
') DO SET "ACTSTATUS=GOOD"
goto :common

:CREDENTIAL_ACTION_FOR_USER_WITHOUT_DOMAIN
rem note double quoted password and "delims=" option
FOR /F "delims=" %%H IN ('
  NET USE "\\192.168.1.1\Path01\Path02" /User:domain\%nik% "%passwd%" 2^>NUL ^| Find /I "The command completed successfully"
') DO SET "ACTSTATUS=GOOD"

:common
rem note parentheses and double quotes
IF "%ACTSTATUS%"=="BAD" (
    Echo "Some error found, please contact administrator."
    GOTO FORM_QMR
) else (
    Echo "Success."
)

带有较少GOTO的另一种方法是使用由choice.exenet.exe设置的ERRORLEVEL

@ECHO OFF
SETLOCAL
:MENU
Title MyTitle

Echo --------------- MENU -----------------------
Echo Press 1 for start or reload program.
Echo Press 0 for exit.
Echo Choose:

CHOICE /C 10 /M "Press 1 for start or reload program, 0 for exit."
IF errorlevel 2 GOTO EXIT

:FORM_QMR
Echo ---------- Fill this Form (%userdomain%) ----------
SET /p nik="Insert Your ID :"
SET /p passwd="Insert Your Password :"

IF %userdomain% == DOMAIN ( 
     set "_shar=\\myserver\Path01\Path02"
     set "_user=/User:domain\%nik%"
) else (
     set "_shar=\\192.168.1.1\Path01\Path02"
     set "_user=/User:domain\%nik%"
)

>NUL 2>&1 NET USE "%_shar%" %_user% "%passwd%"&&SET "ACTSTATUS=OK"||SET "ACTSTATUS=BAD"

IF "%ACTSTATUS%"=="BAD" (
    Echo "Some error found, please contact administrator."
    GOTO FORM_QMR
) else (
    Echo "Success."
)
:EXIT

说明:

(必须与相关的if在同一物理线上。

同样的评论也适用于do

并且else必须是) else (

否,但是,也许(除了更有经验的用户...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM