批量回波特定线

时间:2016-09-10 22:43:44

标签: windows batch-file echo

这是我的第一篇文章,如果我真的搞砸了,我对批处理不是很熟悉。

基本上我正在处理一个小批量脚本,一旦运行,用户输入文件路径和行号,指定文件的指定行将输出到命令行。我有我的所有变量和命令工作,并指定文本文件的行的命令工作正常,它只是当我把我的变量放在它不起作用。现在我猜测我做的事情显然是错误的,因为我是批处理新手,但无论如何我的代码是:

@echo off    
color b      
:top     
title specified line copy tool    
echo input full path to txt file    
set /P filepath=">"    
cls    
echo what line would you like to copy?    
set /P lineoriginal=">"    
set /A actualline=%lineoriginal%-1   
for /F "skip=%actualline% delims=" %%i in (%filepath%) do if not defined output     set "output=%%i"    
echo %output%    
pause  

看看你能否看到我做错了什么,谢谢。

1 个答案:

答案 0 :(得分:0)

从此链接Windows Batch file to echo a specific line number

你可以这样调用这个函数:Call:ReadNthLine <File> <nLine>

:ReadNthLine File nLine
FOR /F %%A IN ('^<"%~1" FIND /C /V ""') DO IF %2 GTR %%A (ECHO Error: No such line %2. 1>&2 & EXIT /b 1)
FOR /F "tokens=1* delims=]" %%A IN ('^<"%~1" FIND /N /V "" ^| FINDSTR /B /C:"[%2]"') DO ECHO.%%B
EXIT /b

您的代码可以像这样重写:

@echo off
color b
:top
cls
title specified line copy tool
echo input full path to txt file
set /P "filepath=>"
cls    
echo what line would you like to copy ?    
set /P "nLine=>"
cls
CALL :ReadNthLine "%filepath%" %nLine%
PAUSE >NUL & goto:top
GOTO :EOF
::***************************************************************************************
:ReadNthLine File nLine
FOR /F %%A IN ('^<"%~1" FIND /C /V ""') DO IF %2 GTR %%A (ECHO Error: No such line %2. 1>&2 & EXIT /b 1)
FOR /F "tokens=1* delims=]" %%A IN ('^<"%~1" FIND /N /V "" ^| FINDSTR /B /C:"[%2]"') DO ECHO.%%B
EXIT /b
::***************************************************************************************