В командном файле, как я могу назначить строку значений в список переменных? - PullRequest
0 голосов
/ 15 февраля 2019

Это в пакетном файле 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 голосов
/ 15 февраля 2019

Я буквально не могу взять кредит на этот ответ.Это прямая копия кода от DosTips.com от пользователя Aacini.

@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%
0 голосов
/ 15 февраля 2019

Хорошо.Более классический подход ...

@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!
0 голосов
/ 15 февраля 2019

Пожалуйста, попробуйте:)

@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 и другие команды), вам нужно будет использовать delayedexpansion

Это могло бы закончиться примерно так:

@echo off
setlocal enabledelayedexpansion
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 (
    set %%a=%%i
    set %%b=%%j
    set %%c=%%k
    set %%d=%%l
    set %%e=%%m
  )
  :# you can echo each value, without having to know the variable name
  echo !%%a! !%%b! !%%c! !%%d! !%%e!
  :# or echo them as know variable names
  echo !First! !Last! !Address! !City! !State!
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...