如何将参数传递给批处理文件?

本文介绍了如何在批处理文件中接收和处理命令行参数,包括使用%1, %2等占位符,以及处理带空格的参数、命名参数和可选参数的各种技巧。示例代码展示了批处理参数传递的不同方法。" 101358306,8694647,Spring Cloud 教程:支付宝支付全面指南,"['Java', 'Spring Cloud', '支付接入', '支付宝API', '微服务']
摘要由CSDN通过智能技术生成

我需要在运行时将ID和密码传递给批处理文件,而不是将其硬编码为文件。

命令行如下所示:

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

#1楼

无需使其复杂化。 例如,它只是命令%1%2的参数,

@echo off

xcopy %1 %2 /D /E /C /Q /H /R /K /Y /Z

echo copied %1 to %2

pause

“暂停”显示批处理文件已完成的操作,并等待您按ANY键。 将其另存为Windows文件夹中的xx.bat。

要使用它,请键入,例如:

xx c:\f\30\*.* f:\sites\30

该批处理文件处理所有必要的参数,例如仅复制文件,更新文件等。自Windows之前我就使用它。 如果要查看正在复制的文件名,请省略Q参数。


#2楼

要在命令行中引用set变量,您将需要使用%a%这样,例如:

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

注意:这适用于Windows 7专业版。


#3楼

@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
SHIFT
GOTO Loop
:Continue

注意:如果将%1括在引号本身中,则如果"%1"==""会引起问题。

在这种情况下,请使用IF [%1]==[]或者仅在NT 4(SP6)和更高版本中使用IF "%~1"==""


#4楼

是的,只是在使用iffor和gang时不要忘记使用%%1类的变量。

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


#5楼

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

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

我的语法可能有些错误,但这是一般的想法。


#6楼

如果要智能处理丢失的参数,可以执行以下操作:

IF %1.==. GOTO No1
IF %2.==. GOTO No2
... do stuff...
GOTO End1

:No1
  ECHO No param 1
GOTO End1
:No2
  ECHO No param 2
GOTO End1

:End1

#7楼

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

这会循环引用或不引用批处理参数(%*),然后回显每个参数。


#8楼

让我们保持简单。

这是.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>

#9楼

我编写了一个简单的read_params脚本,可以将其称为函数(或外部.bat ),并将所有变量放入当前环境中。 它不会修改原始参数,因为正在使用原始参数的副本call该函数。

例如,给出以下命令:

myscript.bat some -random=43 extra -greeting="hello world" fluff

myscript.bat将能够在调用函数后使用变量:

call :read_params %*

echo %random%
echo %greeting%

功能如下:

:read_params
if not %1/==/ (
    if not "%__var%"=="&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值