我正在忙于编写Windows批处理脚本,而且我对参数有一些问题。
我的批处理脚本如下
@echo off
setlocal EnableDelayedExpansion
:: RETRIEVE ARGS WITH SPACES
set VAR01=%~1
set VAR02=%~2
set VAR03=%~3
:: CONFIRM IT WORKED
echo %VAR01%
echo %VAR02%
echo %VAR03%
endlocal
exit /b
我正在尝试传递包含空格的参数。
run_batch.bat "arg var 01" "arg var 02" "arg var 03"
但是当它运行时我得到了输出
arg var 01
ECHO is off
ECHO is off
为什么它只对第一个参数起作用,如何修复?
注
代码从未出现过任何问题,似乎存在导致问题的隐形特殊字符。必须是文本编辑器或类似的东西。如何删除此问题?
答案 0 :(得分:0)
这应该有效:
@echo off
setlocal EnableDelayedExpansion
:: RETRIEVE ARGS WITH SPACES
set VAR01=%~1
set VAR02=%~2
set VAR03=%~3
:: CONFIRM IT WORKED
echo %VAR01%
echo %VAR02%
echo %VAR03%
endlocal
exit /b
错误的部分是:
set VAR01=%~1
set VAR01=%~2
set VAR01=%~3
但应该是:
set VAR01=%~1
set VAR02=%~2
set VAR03=%~3
答案 1 :(得分:0)
一个小例子脚本供您阅读。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
REM EXIT IF NO ARGS RECEIVED
IF "%~1"=="" EXIT
REM SET MINIMUM NUMBER OF ARGS
SET "i=1"
REM RETRIEVE ALL ARGS
:ARGS
SET "VAR0%i%=%~1"
SHIFT
IF NOT "%~1"=="" (
SET/A i+=1
GOTO :ARGS
)
REM INFORM NUMBER OF ARGS
CLS
ECHO=THERE WERE %i% ARGS
REM CONFIRM IT WORKED
ECHO=
SET VAR0
REM ALTERNATIVE CONFIRMATION
ECHO=
FOR /L %%A IN (1,1,%i%) DO IF DEFINED VAR0%%A ECHO=!VAR0%%A!
TIMEOUT -1
ENDLOCAL
EXIT
答案 2 :(得分:0)
我认为除了错字之外没有问题。一个非常棘手的方法来显示args并将它们放到我从DosTips.org学到的编号变量中(但是找不到确切的链接)是:
:: Expand-Args.cmd
@Echo off
Set Args=,1=%~1,2=%~2,3=%~3,4=%~4,5=%~5,6=%~6,7=%~7,8=%~8,9=%~9
Set "Args=%*%Args:,="&Set "Arg%"
Set Arg
批处理将运行此输出:
Expand-Args one "2 2" three 4 five 6 "7 7" 8 9
Arg1=one
Arg2=2 2
Arg3=three
Arg4=4
Arg5=five
Arg6=6
Arg7=7 7
Arg8=8
Arg9=9
Args=one "2 2" three 4 five 6 "7 7" 8 9
修改为了不干扰双引号中的内容,分隔符comma
可能会被替换为不常见的字符,例如ALT + 0127