簡體   English   中英

批處理文件-讀取特定行,並將該行中的特定字符串另存為變量

[英]Batch File - Read specific line, and save a specific string in that line as a variable

有什么方法可以讓/ f循環(或其他任何方式)讀取特定行?

這是我到目前為止的代碼,它讀取每一行的第一個單詞。

@echo off
set file=readtest.txt
for /f "tokens=1 delims= " %%A in (%file%) do (echo %%A)
pause

如果有人能指出我正確的方向,將不勝感激。

謝謝

附加信息:我想制作一個批處理文件,它將一個TXT文件重命名為該TXT文件中位於特定位置的字符串。 我已經弄清楚了如何重命名文件,我需要學習的就是在文件中檢索一個字符串(位於特定位置),該字符串將成為該TXT文件的名稱。

由於您尚未完全定義“特定位置”的含義,因此我將做出一些假設(我認為是合理的),盡管無論您的定義是什么,我提出的方法都同樣有效。

通過將行計數器變量與tokens結合使用,可以在該行上獲得任意行和任意單詞。

假設您的文本文件名可以作為infile.txt文件第四行的第二個參數找到。 您可以通過以下方式獲得該信息:

@setlocal enableextensions enabledelayedexpansion
@echo off
set /a "line = 0"
for /f "tokens=2 delims= " %%a in (infile.txt) do (
    set /a "line = line + 1"
    if !line!==4 set thing=%%a
)
endlocal & set thing=%thing%
echo %thing%

這實際上使用了一些“技巧”,值得進一步說明:

  • line計數器,以確保僅從特定行中獲取所需內容,盡管您可以將test !line!==4更改為所需的內容,例如以#開頭的行,包含字符串xyzzy的第五行,依此類推。
  • 使用setlocal/endlocal可以有效地為您提供一個變量不能泄漏的范圍。 即使對於通常與此類事物通常不相關的語言,這也是一種良好的編程習慣:-)
  • 使用endlocal & set ,以繞過范圍,使thing是, 居然漏(因為它應該)的唯一的事情。
  • 使用延遲擴展和!..! 變量以確保它們在for循環中正確無誤。 如果沒有此設置, %..%將始終擴展為for循環啟動時設置的值。

最后兩個要點實際上是相關的。 讀取命令而不是執行命令時, %..%變量將被擴展。

對於for循環,該命令是從整個事情for到最后) 這意味着,如果在循環中使用%line% ,則會在循環開始運行之前對其進行評估,這將導致該值始終為0 (變量本身可能會更改,但擴展已經發生)。 但是, !line! 會在循環中每次遇到時進行評估,因此將具有正確的值。

同樣,雖然endlocal通常會清除在setlocal之后創建的所有變量,該命令:

endlocal & set thing=%thing%

是擴展上下文中的單個命令。 %thing% 運行endlocal 之前已展開,這意味着它實際上變為:

endlocal & set thing=whatever_thing_was_set_to_before_endlocal

這就是使用setlocalendlocal & set來限制變量從范圍“轉義”的非常有用的原因。 而且,是的,您可以鏈接多個& set節以允許更多變量逃脫作用域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM