在批处理文件中询问用户凭据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在批处理文件中询问用户凭据相关的知识,希望对你有一定的参考价值。

我试图弄清楚如何提示用户输入他的用户凭据并在批处理文件中处理密码。

经过一些相当多的修修补补后,我想出了以下代码:

@echo off

set password=

FOR /F "tokens=* USEBACKQ" %%F IN (`powershell -NoLogo -NoProfile  -Command ^(Get-Credential "ag\%username%"^).GetNetworkCredential^(^).password;`) DO (
  set password=%%F
)
echo %password%

如果用户输入非空密码,这可以正常工作。但是,如果用户没有输入任何内容或只是通过单击“取消”关闭对话框窗口,则变量“password”突然包含字符串“ECHO ist ausgeschaltet(OFF)”。而不是一个空字符串。

有没有人知道如何在这种情况下为密码返回一个空字符串?

在此先感谢坚实

答案

实际上password没有定义。 你得到ECHO ist ausgeschaltet (OFF)ECHO命令的输出,因为你没有数据称它。

要查看真实内容,可以使用set passwordECHO(,奇怪的左括号可以防止变量内容为空时出现问题

...
echo( %password%
set password

顺便说一句。您应该使用扩展集语法,以避免跟踪空格的问题。

set "password="
...
   set "password=%%F"
另一答案

环境变量始终具有值。如果分配了空字符串,则删除该变量(在运行过程中)。

SET FOO=

使用上述语句删除变量FOO。

因此,您需要检查变量是否已定义且不为空。

if defined FOO echo FOO:%FOO%
if not defined FOO echo FOO is not defined

以上是关于在批处理文件中询问用户凭据的主要内容,如果未能解决你的问题,请参考以下文章

SQL 文件中 CONNECT 行中的 SQL Plus SP2-0306,相同的凭据在批处理文件中工作

以编程方式连接到VPN不断询问系统密钥链凭据

如何在将文件复制到网络位置的批处理脚本中提供凭据?

如何使用管理员凭据更改当前用户的文件夹权限?

Amazon Elastic Beanstalk 在运行任何命令时不断询问凭据

如何检查数据库是不是创建?