2016-09-10 5 views
1

これは私の最初の投稿であり、バッチにはあまり熟練していないので、本当にうんざりするとすみませます。バッチエコー特定の行

基本的に、一度実行すると、ユーザーがファイルパスと行番号を入力し、指定されたファイルの指定された行がコマンドラインに出力される小さなバッチスクリプトに取り組んでいます。私はすべての変数とコマンドが動作しているので、テキストファイルの行を指定するコマンドはうまくいきます。変数を入れても機能しません。今、私は私がやっている推測しているが、私はバッチに新たなんだので、明らかに間違っているが、とにかくここに私のコードです:

@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 

あなたは、私が間違って何をしたかの感謝を見ることができます参照してください。このリンクから

+2

ああ、古典的な "それは動作しません "エラー。代わりに何をしていますか? – SomethingDark

+0

引用符で囲まれたファイル名をつけると、空白が含まれている場合に実行する必要があるため、ファイルパスではなく文字列になります。この場合、 'UseBackq'オプションを使う' usebackq - 新しいセマンティクスが有効であることを指定します。ここでは、引用符で囲まれた文字列がコマンドとして実行され、引用符付きの単一の文字列はリテラル文字列コマンドであり、二重引用符file-setのファイル名を引用することができます。 ''引用符で囲まれた文字列はskipコマンドがスキップするたった1行であるため、 '%output%'は空白です。また、デバッグ時にエラーを隠すので、ファイルから 'echo off'を取り除きます。 –

+0

@SomethingDark forループが実行されているとき、delims = "この時点では予期せぬことです。 –

答えて

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 
::***************************************************************************************