【问题标题】:fix variable = variable in a batch file for a password修复变量=密码批处理文件中的变量
【发布时间】:2012-11-25 00:12:39
【问题描述】:

在这个批处理文件中,我试图创建一个程序,用户可以在其中输入他或她想要的密码,并在他们打开或关闭批处理文件时使用它。 问题是我无法获得用户密码和(在:MDLOCKER 和:UNLOCK)和脚本的解锁部分工作。当最终让它工作时,它接受任何密码
如果您能提供帮助,那将非常感谢。

enter code here@ECHO OFF
prompt Filelocker`enter code here`
:START
echo what do you want to do?  (insert number)
echo 1 Lock current folder
echo 2 Unlock current folder
echo 3 Make new locked folder

set/p "cho=>"
if %cho%==1 goto CONFIRM
if %cho%==2 goto UNLOCK
if %cho%==3 goto NEW
echo not valid
goto start

: NEW
title Folder Locked files
if EXIST "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" goto ALREADY
if NOT EXIST Locker goto MDLOCKER

:ALREADY
echo folder already exist!
echo try unlocking if folder can not be found
pause
goto START



:CONFIRM
echo Are you sure u want to Lock the folder(Y/N)
set/p "cho=>"
if %cho%==Y goto LOCK
if %cho%==y goto LOCK
if %cho%==n goto END
if %cho%==N goto END
echo Invalid choice.
goto CONFIRM


:LOCK
ren Locker "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
echo Folder locked
goto end

:MDLOCKER
md Locker
echo Locked folder created....
echo folder is now created 
echo enter password for your file.
set/p 1%=
echo password accepted 
goto start




:UNLOCK
echo Enter password to Unlock folder
set/p "pass=>"
if NOT %pass%==%1% goto FAIL
attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
ren "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" Locker
echo Folder Unlocked successfully
goto End


:FAIL
echo Invalid password
echo 2 MORE TRYS LEFT
pause
goto 


:End

【问题讨论】:

    标签: batch-file passwords batch-processing


    【解决方案1】:

    我认为您无法更改位置参数%1 .. %9。请尝试将密码保存到变量中。

    【讨论】:

      【解决方案2】:

      问题出在这里:

      set/p 1%=
      

      你为什么要这么做?

      您不能使用像 var-name 这样的特殊 var。 而且你不能在 var-name 的开头使用数字。

      您可以使用命令 Choice 而不是您正在使用的所有 IF 语句:

      @ECHO OFF
      prompt Filelocker`enter code here`
      :START
      echo what do you want to do?  (insert number)
      echo 1 Lock current folder
      echo 2 Unlock current folder
      echo 3 Make new locked folder
      
      choice /C 123 /M "choose an option: "
      IF %ERRORLEVEL% EQU 1 (goto :CONFIRM)
      IF %ERRORLEVEL% EQU 2 (goto :UNLOCK)
      IF %ERRORLEVEL% EQU 3 (goto :NEW)
      
      :NEW
      title Folder Locked files
      if EXIST "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" (
          echo folder already exist!
          echo try unlocking if folder can not be found
          pause
          goto :START
      )
      if NOT EXIST "Locker" (goto :MDLOCKER)
      
      :CONFIRM
      choice /C YN /M "Are you sure u want to Lock the folder? "
      IF %ERRORLEVEL% EQU 1 (goto :LOCK)
      IF %ERRORLEVEL% EQU 2 (goto :END)
      
      :LOCK
      ren Locker "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
      attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
      echo Folder locked
      goto :end
      
      :MDLOCKER
      md "Locker"
      echo Locked folder created....
      echo folder is now created 
      echo enter password for your file.
      set/p "VAR=>> "
      echo password accepted 
      goto :start
      
      :UNLOCK
      echo Enter password to Unlock folder
      set/p "pass=>> "
      if NOT "%pass%"=="%VAR%" goto FAIL
      attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
      ren "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" Locker
      echo Folder Unlocked successfully
      goto End
      
      :FAIL
      echo Invalid password
      echo 2 MORE TRYS LEFT
      pause
      goto :UNLOCK
      
      :End
      

      【讨论】:

      • "你不能使用像 var-name 这样的特殊 var" 不正确。 var-name 可以具有任何形式,并且可以包含 任何字符,但等号除外,尽管某些字符可能会导致某些管理困难(如百分号)。 “而且你不能在 var-name 的开头使用数字” 又错了,只需在命令行中输入以下内容即可确认:set 1%=Value of 1% variableset 1。请参阅:this post 了解更多详情。
      • 天哪,你在哪里学习批处理??抱歉,但我需要说一下:在每种编程语言中,不使用数字作为变量名的第一个字符是一条规则,如果你像你说的那样使用“set 1%=Value”,那会产生任何影响。请了解一下。并且您不能定义像特殊 var(ARGUMENT VAR %0 %1 等)这样的变量名,因为它们都是系统保留的,
      • c:\> set 1%=Value ; c:\> set 1 将产生1%=Value。您还可以使用启用的eyaedexpansion - c:\>setlocal enabledelayedexpansion 访问1%c:\> echo !1%! 会给你value 。 Aacini 是对的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 2010-10-23
      • 2018-01-14
      • 2013-05-27
      • 1970-01-01
      • 2018-09-16
      相关资源
      最近更新 更多