2013-06-11 22 views
0

我需要根據循環中獲取的行號將文件中的行提取到文件中。實際上,我從第一個FOR命令中得到第7行,到目前爲止這麼好,我必須將這一行讀入myfile.txt。讀操作在第二個FOR循環中執行;這一步不工作,因爲我得到的輸出「的Result.txt」空通過使用循環中的特定行號獲取文件中的行

for /f "tokens=1* delims=:" %%a in (lines.txt) do set line=%%a& goto breakFor "%line%" 

:breakFor 
echo.%line% 
for /f "tokens=*" %%a in ('findstr /n .* "myfile.txt"') do if "%%a"=="%1" set line=%%i 
echo.%line%>result.txt 

這裏的myfile.txt的一部分,lines.txt

lines.txt 
7:I=output7 
515:I=output515 
837:I=output837 
851:I=output851 

myfile.txt is made of lines of text (I1,I2,I3,...) 
I1=some text.... 
I2=text... 

你能告訴我爲什麼,並幫助修復那? 感謝

+0

請張貼幾行'myfile.txt'和_clearly_解釋您想要實現的內容。不要以爲我們知道'行號'的含義! – Aacini

+0

在你的例子中,myfile.txt有4行。第一個分號前有7。你想要這個文件的第7行嗎?但它只有4行! – Aacini

+0

我將得到第7行並將其搜索到myfile.txt中以讀取此行 – new

回答

2

批處理文件下面請執行下列操作:

  • 讀取文件的第一行lines.txt
  • 獲取在分號前出現的數字
  • 使用此編號在myfile.txt中找到該行
  • 顯示該行

for /f "tokens=1* delims=:" %%a in (lines.txt) do set line=%%a& goto breakFor 
:breakFor 
echo.%line% 
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "myfile.txt" ^| findstr "^%line%:') do set line=%%b 
echo.%line%>result.txt 

這是你想要的嗎?我寧願這樣做:

for /f "tokens=1* delims=:" %%a in (lines.txt) do set /A line=%%a-1& goto breakA 
:breakA 
echo.%line% 
for /f "skip=%line% tokens=1* delims=:" %%a in ('findstr /n "^" "myfile.txt"') do set line=%%b& goto breakB 
:breakB 
echo.%line%>result.txt 
+0

不是真的,result.txt仍然是空的請問您希望獲得分號前出現的數字嗎?事實上,我想將第7行myfile.txt,這是不同的lines.txt中,我已經檢索行號7.謝謝 – new

+0

這是好的!非常感謝。請你可以評論一下你的代碼?什麼意思「^」到'findstr/n「^」「myfile.txt」'?真的再次感謝您 – new

+0

@new:這完全等同於您的'f indstr/n。*「myfile.txt」**; - )**如果您認爲這個答案對您有用,您可以贊成它,或者接受它作爲最佳答案,或兩者兼而有之! – Aacini

1

試試這個,看看輸出:

@echo off &setlocal 
set "line=test" 
goto breakFor "%line%" 
:breakFor 
echo "%~1" 
+1

提示命令顯示「」 – new

+0

當然。你看到:這不起作用:'for/f「tokens = 1 * delims =:」%% a in(lines.txt)do set line = %% a&goto breakFor「%line%'和'if」%% a 「==」%1「'。 – Endoro

+0

請爲什麼你給我測試的例子不起作用?set」line = test「goto breakFor」%line%「 :breakFor echo」%〜1「 – new

相關問題