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

下面是命令行的样子:

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

当前回答

创建一个新的批处理文件(例如:openclass.bat),并在文件中写入这一行:

java %~n1

然后将批处理文件放在system32文件夹中,找到你的Java类文件,右键单击,Properties, Open with…,然后找到你的批处理文件,选择它,这就是…

这对我很管用。

PS:当我关闭Java类时,我找不到关闭cmd窗口的方法。现在……

其他回答

是的,在使用if和for和the gang时,不要忘记使用%%1这样的变量。

如果您忘记使用double %,那么您将替换(可能为空)命令行参数,并且您将收到一些非常令人困惑的错误消息。

访问批处理参数可以简单地使用%1,%2,…%9或%*, 但前提是内容简单。

对于像“&”^&这样的复杂内容,没有简单的方法,因为不可能访问%1而不产生错误。

set  var=%1
set "var=%1"
set  var=%~1
set "var=%~1"

这些线延伸到

set  var="&"&
set "var="&"&"
set  var="&"&
set "var="&"&"

并且每一行都失败,因为其中一个&在引号之外。

这可以通过从临时文件中读取参数的注释版本来解决。

@echo off
SETLOCAL DisableDelayedExpansion

SETLOCAL
for %%a in (1) do (
    set "prompt="
    echo on
    for %%b in (1) do rem * #%1#
    @echo off
) > param.txt
ENDLOCAL

for /F "delims=" %%L in (param.txt) do (
  set "param1=%%L"
)
SETLOCAL EnableDelayedExpansion
set "param1=!param1:*#=!"
set "param1=!param1:~0,-2!"
echo %%1 is '!param1!'

诀窍是在rem语句后启用echo并展开%1(也适用于%2 ..% *)。 因此,即使是“&”&也可以被重复而不会产生错误,正如上面所说的那样。

但是为了能够重定向echo on的输出,您需要两个for循环。

额外的字符* #用于安全对抗/?(有助于快速眼动)。 或者行尾的插入号可以作为多行字符,甚至在rem之后。

然后从文件中读取rem参数输出,但要小心。 FOR /F应该在延迟展开关闭的情况下工作,否则带有"!"的内容将被销毁。 在删除param1中的额外字符后,您就得到了它。

要以安全的方式使用param1,请启用延迟扩展。

批处理文件

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

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

在命令行中,传递参数

Directory> batchFileName admin P@55w0rd 

输出将是

admin
P@55w0rd

创建一个新的批处理文件(例如:openclass.bat),并在文件中写入这一行:

java %~n1

然后将批处理文件放在system32文件夹中,找到你的Java类文件,右键单击,Properties, Open with…,然后找到你的批处理文件,选择它,这就是…

这对我很管用。

PS:当我关闭Java类时,我找不到关闭cmd窗口的方法。现在……

每个人的回答都很复杂,但实际上很简单。%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