在批处理中回显变量内的变量

时间:2015-02-10 14:44:19

标签: git batch-file

这是我的场景:在设置变量中的每一行之后,我创建一个批处理从file.txt中恢复一些数字行。之后我想在git命令中使用动态创建的不同变量。

我真的很高级(特别是感谢这个网站)并接近最终目标。让我们假设我的 file.txt 看起来像这样,并调用errorLine.txt:

365
369
389
393
413
417
437
491
515
566
587
610
681
887
964

我的脚本(blame.bat): 的 EDITED

FINDSTR /R /N "^.*" ..\log_test\errorLine.txt | FIND /C ":" > ..\log_test\numbLine.txt
(set /p i=)<..\log_test\numbLine.txt
echo %i%
setlocal EnableDelayedExpansion

rem Load the lines of file in "l" array:
set n=0
for /F %%a in (..\log_test\errorLine.txt) do (
   set /A n+=1
   set "l!n!=%%a"
)

rem Show any line you want, for example:
set n=1
git blame -L !l%n%!,+1 ..\..\core\src\filepath.cpp -e
set n=2
git blame -L !l%n%!,+1 ..\..\core\src\filepath.cpp -e

pause

那是有效的,但有没有办法不必为每一行设置最后一行(set n=1set n=2,...)并增加链接的数量线?

提前致谢。

2 个答案:

答案 0 :(得分:1)

FINDSTR /R /N "^.*" ..\log_test\errorLine.txt | FIND /C ":" > ..\log_test\numbLine.txt
(set /p i=)<..\log_test\numbLine.txt
echo %i%
set n=1
setlocal enableDelayedExpansion
for /L %%n in (1,1,%i%) do (
    grep -m%%n "[0-9][0-9][0-9]" ..\log_test\errorLine.txt | tail -n1 > ..\log_test\line%%n.txt
    (set /p l%%n=)<..\log_test\line%%n.txt
    echo '!l%%n!'
    )
echo "%l15%"
cd 
pause
endlocal

可能这就是你要找的东西。你需要延迟扩展,%% n应该是%所包围的一面。但是我没有安装grep和tee,所以不确定这是否可行。

答案 1 :(得分:1)

对不起。解决问题的方法是插入

setlocal EnableDelayedExpansion

在程序开头,然后使用它:

echo '!l%%n!'

然而,这是我这样做的方式:

@echo off
setlocal EnableDelayedExpansion

rem Load the lines of file in "l" array:
set n=0
for /F %%a in (..\log_test\errorLine.txt) do (
   set /A n+=1
   set "l!n!=%%a"
)

rem Show any line you want, for example:
set n=15
echo '!l%n%!'

有关详细信息,请参阅this post