繁体   English   中英

批量回显变量中的变量

[英]echo a variable inside a variable in batch

这是我的情况:在变量中设置每行后,我进行了批处理以从file.txt恢复一些数字行。 之后,我想在git命令中使用动态创建的其他变量。

我真的进步了(特别是感谢这个站点),并且接近最终目标。 假设我的file.txt看起来像这样,叫做errorLine.txt:

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

我的脚本在这里(blame.bat):已编辑

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=1set n=2 ,...)并增加行数的链接?

提前致谢。

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,因此不确定是否可以使用。

劳驾。 解决问题的方法是插入

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%!'

有关更多详细信息,请参阅此文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM