在批处理文件中,如何将一串值分配给变量列表?

时间:2019-02-15 17:48:06

标签: windows batch-file

这在Windows批处理文件中 在第一个字符串中,我有一个数据值列表 在第二个字符串中,我有一个变量名列表 我想将第一个字符串中的每个值分配给第二个字符串中的相应变量。

我尝试了许多方法,但均未成功。以下是一些我尝试过的无效代码。我该怎么做?

@echo off
SETLOCAL EnableDelayedExpansion
::SplitStrExample.bat

Set "DataVar=Mike,Smith,123 Main St,Wallawalla,Washington"
Set "VarNames=First Last Address City State"

for %%v in (%VarNames%) do set "%%v=")
FOR /D %%F IN (%DataVar3%) DO (
    for %%v in (%VarNames%) do (
        Set CurVar=%%v
        if "!CurVar!"=="" (
            @echo setting [%%v] to [%%F]
            set %%v=%%F
        )
    )
)

@echo First=%First%
@echo Last=%Last%
@echo Address=%Address%
@echo City=%City%
@echo State=%State%

goto:eof

3 个答案:

答案 0 :(得分:4)

我从字面上不能为这个答案赢得任何荣誉。这是用户Aacini来自DosTips.com的代码的直接副本。

@echo off
SETLOCAL EnableDelayedExpansion

Set "DataVar=Mike,Smith,123 Main St,Wallawalla,Washington"
Set "VarNames=First Last Address City State"

set "p=%%"
set "v=%VarNames: =" & set "s=!DataVar:*,=!" & call set "!v!=!p!DataVar:,!s!=!p!" & set "DataVar=!s!" & set "v=%" & set "!v!=!s!"

echo First=%First%
echo Last=%Last%
echo Address=%Address%
echo City=%City%
echo State=%State%

答案 1 :(得分:2)

请尝试一下:)

@echo off
set "DataVar=Mike,Smith,123 Main St,Wallawalla,Washington"
set "VarNames=First,Last,Address,City,State"

for /f "tokens=1-5 delims=," %%a in ("%VarNames%") do (
   for /f "tokens=1-5 delims=," %%i IN ("%DataVar%") DO (
    echo %%a=%%i
    echo %%b=%%j
    echo %%c=%%k
    echo %%d=%%l
    echo %%e=%%m
  )
)

请注意,我们使用,作为分隔符,因此名称,姓氏等都仅由,相互分隔。默认的分隔符是空格,但是在这里我们强制使用分隔符,因此空白将成为值的一部分。注意,这里根本不需要它,但是如果您确实需要将它们设置为看起来更易读的变量,则可以,但是一旦要使用它们(echo和其他命令),就需要使用{{1} }

然后它会变成这样:

delayedexpansion

答案 2 :(得分:2)

好的。一种更经典的方法...

@echo off
setlocal EnableDelayedExpansion

Set "DataVar=Mike,Smith,123 Main St,Wallawalla,Washington"
Set "VarNames=First Last Address City State"

for %%v in (%VarNames%) do for /F "tokens=1* delims=," %%a in ("!DataVar!") do set "%%v=%%a" & set "DataVar=%%b"

for %%v in (%varNames%) do echo %%v=!%%v!