2012-03-02 112 views
1

我有三个变量让说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甲
B 2 - [R

一点我想此重定向到文件

回答

0
$ 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 

注:如果你把所有的值一行一行到分隔的文件,它会更容易些。

+0

想这在Windows批处理 – user101743 2012-03-02 15:40:07

+0

您可以安装'GNU-utils'窗户。 – kev 2012-03-02 15:42:31

+0

在相关说明中,它让我感到困惑,Windows有一个'clip'程序,但不是''paste'“或'clip/p'。我发现使用getclip/putclip更改了行尾。 – ixe013 2012-03-02 16:38:28

1

这种基于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 

我也试过以下是在情况更加灵活,你曾经有一个可变数目的令牌,但它看起来拒绝令牌说明符中的变量(不管是否使用延迟变量扩展)。也许别人知道这是为什么?:

@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 
) 
+0

_nested_'FOR/F'命令的选项不能包含嵌套/父'FOR'的参数。但是,它可能包含一个批处理文件参数,因此您可以提取三个FOR并将它们放入子例程中。但是,此解决方案不会按要求在同一行中显示三个值。 – Aacini 2012-03-03 00:01:29

+0

Aacini,你是正确的,即使它工作,我的非工作版本也不会在同一行输出它们。设置(vs.回声)“FOR/F”行中的%% i,%% j和%% k是我在实现整体方法无效之前开始尝试的概念,之后我只是使用黑客入侵笔记回声。 – Marc 2012-03-03 17:47:51

1

以下工作批处理文件与任意数量的令牌/字段:

@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