%params%
包含一组变量参数:
/tidy /log /truncate /convert D:\libdir
或者
/log /tidy D:\cyclea\libfolder /test /convert /truncate
除了(当前单个)filepath元素之外的所有内容我都使用它:
if "%params%"=="%params:log=%" goto :DontLogit
if NOT "%params%"=="%params:/tidy=%" (call tidysub: & do something else )
现在我想提取filepath元素并将其用作命令的参数,例如chdir
我玩过,但我对DOS字符串操作和for
循环很弱..
我想保持params的顺序变量。 有关信息,请来此处:
FOR %%s IN (%*) DO (set params=!params! %%s)
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
SET swparams=log tidy test convert truncate
FOR %%i IN (%swparams% other) DO SET "%%i="
FOR %%i IN (%*) DO (
SET "used="
FOR %%p IN (%swparams%) DO (IF /i "/%%p"=="%%~i" SET %%p=Y&SET used=Y)
IF NOT DEFINED used CALL SET other=%%other%% "%%~i"
)
ECHO =============paramsreport===========
FOR %%i IN (%swparams%) DO IF DEFINED %%i (ECHO %%i:set) ELSE (ECHO %%i:clear)
ECHO other=%other%
FOR %%i IN (%other%) DO ECHO %%i or %%~i
GOTO :EOF
这是一种应该可以扩展的方式。
只需将开关参数设置为swparams中的列表。
参数名称和OTHER设置为[nothing]以确保它们尚未在环境中设置。
Ech提供的参数依次应用于%% i,并依次与每个定义的swparam匹配。在匹配之前清除变量USED
,如果找到匹配(/switchparametername
,则设置switch参数并设置USED标志。
如果未使用的标志被设置为获得任何开关参数,则使用解析技巧将任何未识别的字符串累积到OTHER
"%%~i"
机制首先在%% i中取消引用该项,然后引用它。通过这种方式,它最终会被引用,无论它是否最初都有引号。
/i
上的if
执行不区分大小写的匹配。
因此运行此批次
thisbatch /tidy "C:\some filename with spaces.txt"
将TIDY
设置为Y
,LOG
,test
,convert
,truncate
未设置且other
设置为"C:\some filename with spaces.txt"
到{{1}}
答案 1 :(得分:0)
@echo off
setlocal EnableDelayedExpansion
rem Get the single filepath element (with colon in second character):
set params=/tidy /log /truncate /convert D:\libdir
set filepath=
for %%a in (%params%) do (
set par=%%a
if "!par:~1,1!" == ":" (
set filepath=%%a
)
)
if defined filepath (
echo Filepath = %filepath%
) else (
echo Filepath not given
)
echo/
rem Get multiple filepath elements in an *array*:
set params=/log /tidy D:\cyclea\libfolder /test /convert D:\libdir /truncate
set i=0
for %%a in (%params%) do (
set par=%%a
if "!par:~1,1!" == ":" (
set /A i+=1
set filepath[!i!]=%%a
)
)
echo There are %i% filepath elements:
for /L %%i in (1,1,%i%) do (
echo %%i- !filepath[%%i]!
)
您可以在此帖子中查看有关阵列管理的更多说明:Arrays, linked lists and other data structures in cmd.exe (batch) script