我需要在运行批处理文件时传递一个ID和密码,而不是将它们硬编码到文件中。
下面是命令行的样子:
test.cmd admin P@55w0rd > test-log.txt
我需要在运行批处理文件时传递一个ID和密码,而不是将它们硬编码到文件中。
下面是命令行的样子:
test.cmd admin P@55w0rd > test-log.txt
当前回答
@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
SHIFT
GOTO Loop
:Continue
注意:如果“%1”==“”将导致问题,如果%1本身被括在引号中。
在这种情况下,使用IF[%1]==[],或者仅在NT 4 (SP6)及以后版本中使用IF "%~1"==""。
其他回答
让我们保持简单。
下面是.cmd文件。
@echo off
rem this file is named echo_3params.cmd
echo %1
echo %2
echo %3
set v1=%1
set v2=%2
set v3=%3
echo v1 equals %v1%
echo v2 equals %v2%
echo v3 equals %v3%
下面是命令行中的3个调用。
C:\Users\joeco>echo_3params 1abc 2 def 3 ghi
1abc
2
def
v1 equals 1abc
v2 equals 2
v3 equals def
C:\Users\joeco>echo_3params 1abc "2 def" "3 ghi"
1abc
"2 def"
"3 ghi"
v1 equals 1abc
v2 equals "2 def"
v3 equals "3 ghi"
C:\Users\joeco>echo_3params 1abc '2 def' "3 ghi"
1abc
'2
def'
v1 equals 1abc
v2 equals '2
v3 equals def'
C:\Users\joeco>
另一个有用的技巧是使用%*表示“所有”。例如:
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
我的语法可能有点错误,但这是大意。
如果你担心安全/密码盗窃(导致你设计这个解决方案,需要登录凭证在执行而不是静态的硬编码不需要数据库),然后您可以存储api或一半密码解密的代码或程序文件解密密钥,所以在运行时,用户将在控制台输入用户名/密码散列/解密之前传递给程序代码执行通过设置/ p,如果你查看在运行时用户输入凭据。
如果您正在运行一个脚本,使用不同的用户/密码运行程序,那么命令行参数将适合您。
如果您正在制作一个测试文件来查看不同登录的输出/效果,那么您可以将所有登录存储在一个加密文件中,作为参数传递给test。Cmd,除非你想坐在命令行并输入所有的登录,直到完成。
可以提供的参数数量限制为命令行上的字符总数。为了克服这一限制,上一段技巧是一种变通方法,不会有暴露用户密码的风险。
没有必要把事情复杂化。例如,它只是命令%1 %2参数,
@echo off
xcopy %1 %2 /D /E /C /Q /H /R /K /Y /Z
echo copied %1 to %2
pause
“pause”显示批处理文件所做的工作,并等待您按下ANY键。将其保存为Windows文件夹中的xx.bat。
要使用它,输入,例如:
xx c:\f\30\*.* f:\sites\30
这个批处理文件负责所有必要的参数,比如只复制文件、更新的文件等等。在Windows出现之前,我就开始使用它了。如果您喜欢在复制文件时查看文件名,可以省略Q参数。
每个人的回答都很复杂,但实际上很简单。%1 %2 %3等是解析到文件的参数。%1是参数1,%2是参数2,以此类推。
所以,如果我有一个bat脚本包含这个:
@echo off
echo %1
当我运行批处理脚本时,我输入这个:
C:> script.bat Hello
脚本将简单地输出:
Hello
这对于脚本中的某些变量非常有用,比如名字和年龄。如果我有一个这样的脚本:
@echo off
echo Your name is: %1
echo Your age is: %2
当我输入这个:
C:> script.bat Oliver 1000
我得到这样的输出:
Your name is: Oliver
Your age is: 1000