Переадресация переменных среды в командный файл - PullRequest
1 голос
/ 02 марта 2012

У меня есть три переменные, скажем, SOURCE_SUCCESS, JULIANDAYS, APPROVEREJECT

Значение SOURCE_SUCCESS = a, b, c, d, e, f

Значение JULIANDAYS = 1,2,3,4,5

Значение APPROVEREJECT = A, R, A, A, R

Теперь я хочу напечатать значения трех переменных в формате, как показано ниже, с помощью команд пакетного файла

1 A
б 2 р

и т. Д.

Еще один момент, я хочу перенаправить его в файл

Ответы [ 3 ]

1 голос
/ 02 марта 2012

Этот подход на основе DOS работает для вашего конкретного запроса:

@echo off
set SOURCE_SUCCESS=a,b,c,d,e,f
set JULIANDAYS=1,2,3,4,5
set APPROVEREJECT=A,R,A,A,R 

:ROW1
for /f "tokens=1" %%j in ('echo %SOURCE_SUCCESS%') do set col1=%%j
for /f "tokens=1" %%j in ('echo %JULIANDAYS%') do set col2=%%j
for /f "tokens=1" %%j in ('echo %APPROVEREJECT%') do set col3=%%j
echo %col1%  %col2%  %col3% > myfile.txt

:ROW2
for /f "tokens=2" %%j in ('echo %SOURCE_SUCCESS%') do set col1=%%j
for /f "tokens=2" %%j in ('echo %JULIANDAYS%') do set col2=%%j
for /f "tokens=2" %%j in ('echo %APPROVEREJECT%') do set col3=%%j
echo %col1%  %col2%  %col3% >> myfile.txt

:ROW3
for /f "tokens=3" %%j in ('echo %SOURCE_SUCCESS%') do set col1=%%j
for /f "tokens=3" %%j in ('echo %JULIANDAYS%') do set col2=%%j
for /f "tokens=3" %%j in ('echo %APPROVEREJECT%') do set col3=%%j
echo %col1%  %col2%  %col3% >> myfile.txt

:ROW4
for /f "tokens=4" %%j in ('echo %SOURCE_SUCCESS%') do set col1=%%j
for /f "tokens=4" %%j in ('echo %JULIANDAYS%') do set col2=%%j
for /f "tokens=4" %%j in ('echo %APPROVEREJECT%') do set col3=%%j
echo %col1%  %col2%  %col3% >> myfile.txt

:ROW5
for /f "tokens=5" %%j in ('echo %SOURCE_SUCCESS%') do set col1=%%j
for /f "tokens=5" %%j in ('echo %JULIANDAYS%') do set col2=%%j
for /f "tokens=5" %%j in ('echo %APPROVEREJECT%') do set col3=%%j
echo %col1%  %col2%  %col3% >> myfile.txt

Выход:

a  1  A
b  2  R
c  3  A
d  4  A
e  5  R

Я также попробовал следующее, чтобы быть более гибким на случай, если у вас когда-либо будет переменное число токенов, но, похоже, DOS отклоняет переменные в спецификаторе токена (независимо от того, используется расширение с задержкой или нет). Может, кто-то еще знает почему?

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set SOURCE_SUCCESS=a,b,c,d,e,f
set JULIANDAYS=1,2,3,4,5
set APPROVEREJECT=A,R,A,A,R 

REM The following doesn't work because variable as 'tokens' are rejected
for /L %%i in (1,1,5) Do (
   set fieldnum=%%i
   for /f "tokens=!fieldnum!" %%j in ('echo %SOURCE_SUCCESS%') do echo %%j
   for /f "tokens=!fieldnum!" %%k in ('echo %JULIANDAYS%') do echo %%k
   for /f "tokens=!fieldnum!" %%l in ('echo %APPROVEREJECT%') do echo %%l
)
1 голос
/ 03 марта 2012

Пакетный файл ниже работает с любым количеством токенов / полей:

@echo off
setlocal EnableDelayedExpansion
set SOURCE_SUCCESS=a,b,c,d,e,f
set JULIANDAYS=1,2,3,4,5
set APPROVEREJECT=A,R,A,A,R 
set i=0
for %%a in (%SOURCE_SUCCESS%) do (
    set /A i+=1
    set result[!i!]=%%a
)
set /A n=i, i=0
for %%a in (%JULIANDAYS%) do (
    set /A i+=1
    for %%i in (!i!) do set result[%%i]=!result[%%i]! %%a
)
if %i% gtr %n% set n=%i%
set i=0
for %%a in (%APPROVEREJECT%) do (
    set /A i+=1
    for %%i in (!i!) do set result[%%i]=!result[%%i]! %%a
)
if %i% gtr %n% set n=%i%
for /L %%i in (1,1,%n%) do echo !result[%%i]! >> thefile.txt

Это результат:

a 1 A
b 2 R
c 3 A
d 4 A
e 5 R
f

РЕДАКТИРОВАТЬ : Добавлен новый метод

Пакетный файл ниже меньше и позволяет легче обрабатывать любое количество переменных:

@echo off
setlocal EnableDelayedExpansion
set SOURCE_SUCCESS=a,b,c,d,e,f
set JULIANDAYS=1,2,3,4,5
set APPROVEREJECT=A,R,A,A,R 
set n=0
for %%v in (SOURCE_SUCCESS JULIANDAYS APPROVEREJECT) do (
    set i=0
    for %%a in (!%%v!) do (
        set /A i+=1
        for %%i in (!i!) do set result[%%i]=!result[%%i]! %%a
    )
    if !i! gtr !n! set n=!i!
)
for /L %%i in (1,1,%n%) do echo !result[%%i]! >> thefile.txt
0 голосов
/ 02 марта 2012
$ paste <(echo $SOURCE_SUCCESS | tr ',' '\n') <(echo $JULIANDAYS | tr ',' '\n') <(echo $APPROVEREJECT | tr ',' '\n') >output.txt

$ cat output.txt
a       1       A
b       2       R
c       3       A
d       4       A
e       5       R
f

Примечание: Было бы проще, если бы все значения построчно помещались в отдельные файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...