这在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
答案 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!