我需要在运行批处理文件时传递一个ID和密码,而不是将它们硬编码到文件中。

下面是命令行的样子:

test.cmd admin P@55w0rd > test-log.txt

当前回答

要在命令行中引用一个set变量,你需要使用%a%,例如:

set a=100 
echo %a%  
rem output = 100 

注意:这适用于Windows 7 pro。

其他回答

批处理文件

set argument1=%1
set argument2=%2
echo %argument1%
echo %argument2%

%1和%2分别返回第一个和第二个参数值。

在命令行中,传递参数

Directory> batchFileName admin P@55w0rd 

输出将是

admin
P@55w0rd

如果你担心安全/密码盗窃(导致你设计这个解决方案,需要登录凭证在执行而不是静态的硬编码不需要数据库),然后您可以存储api或一半密码解密的代码或程序文件解密密钥,所以在运行时,用户将在控制台输入用户名/密码散列/解密之前传递给程序代码执行通过设置/ p,如果你查看在运行时用户输入凭据。

如果您正在运行一个脚本,使用不同的用户/密码运行程序,那么命令行参数将适合您。

如果您正在制作一个测试文件来查看不同登录的输出/效果,那么您可以将所有登录存储在一个加密文件中,作为参数传递给test。Cmd,除非你想坐在命令行并输入所有的登录,直到完成。

可以提供的参数数量限制为命令行上的字符总数。为了克服这一限制,上一段技巧是一种变通方法,不会有暴露用户密码的风险。

另一个有用的技巧是使用%*表示“所有”。例如:

echo off
set arg1=%1
set arg2=%2
shift
shift
fake-command /u %arg1% /p %arg2% %*

跑步时:

test-command admin password foo bar

上面的批处理文件将运行:

fake-command /u admin /p password admin password foo bar

我的语法可能有点错误,但这是大意。

要在命令行中引用一个set变量,你需要使用%a%,例如:

set a=100 
echo %a%  
rem output = 100 

注意:这适用于Windows 7 pro。

FOR %%A IN (%*) DO (
    REM Now your batch file handles %%A instead of %1
    REM No need to use SHIFT anymore.
    ECHO %%A
)

这个循环遍历批处理参数(%*),不管它们是否带引号,然后回显每个参数。