这是我的场景:在设置变量中的每一行之后,我创建一个批处理从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=1
,set n=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。