安全密码保护批次

问题描述 投票:0回答:1

我目前正在制作受密码保护的批处理文件, 问题是当我输入

@echo on
%@echo on%
时,它会显示密码(一会儿,但如果你制作视频,你可以清楚地看到它)。

当我将第三行更改为

if "%pwd%"==somepassword
时,然后再次输入
@echo on
会显示密码。

我有一些想法。对于前。使

@echo off
不可更改,或字符转义,但我不太擅长批处理脚本,所以我无法通过代码编写它。

有人可以帮我吗?

@echo off
set /p pwd="Enter password: "
if %pwd%==somepassword (cmd /k) else (exit)
batch-file cmd
1个回答
1
投票

可以使用:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "pwd="

:PwdPrompt
set /P "pwd=Enter password: " || goto PwdPrompt
setlocal EnableDelayedExpansion
if not "!pwd!" == "somepassword" exit /B
endlocal
echo The password is correct!
echo(
pause
endlocal

首先完全定义所需的执行环境

  • 关闭命令回显模式并且
  • 启用命令扩展和
  • 禁用延迟变量扩展。

环境变量

pwd
接下来显式未定义。用户必须输入密码。

系统会提示用户输入密码,只要用户根本不输入字符串,就会循环完成此操作。因此批处理文件不接受任何输入。

然后在进行字符串比较之前启用延迟变量扩展,利用延迟变量扩展来防止用户输入的字符串修改批处理文件代码以执行。

如果两个比较的字符串不相等,则退出批处理文件处理(不一定是命令进程),这会导致在真正退出处理之前,对两个

endlocal
隐式执行
cmd.exe
两次
setlocal
批处理文件。

否则,如果输入密码字符串等于批处理文件中的密码字符串,则在使用下一个命令继续批处理文件处理之前,将恢复先前禁用延迟扩展的本地环境。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • pause /?
  • set /?
  • setlocal /?

我强烈建议您也阅读:

© www.soinside.com 2019 - 2024. All rights reserved.