假設我在"%userprofile%~.txt "下的檔案中有以下內容:
文本塊的數量可以不同。 我想得到的是出現在每個塊的最后一行的兩個坐標中的第一個,所以根據這個例子,結果應該是: 為了在批處理腳本中做到這一點,我首先通過一個初始的for回圈來分析檔案,檢索出包含 "default up, attached "字串的行。
然后對于每個檢索到的字串,我搜索最后出現的 從前面的結果中,我搜索 我找到了一個在for回圈外作業的解決方案(見下面標有 我的腳本: uj5u.com熱心網友回復: 另一種方法是利用powershell的regex來做這個: uj5u.com熱心網友回復: 你可以使用小括號和逗號作為分隔符來獲得所需的值。因為你的一個輸入行有額外的逗號,這將需要兩個嵌套的
標籤:Monitor!
Monitor: 通用PnP監視器
設備。DISPLAY1
配接器。Intel(R) UHD Graphics 630
(1920 x 1080 x 32 bpp) 60Hz 默認向上,連接 (-1920,0)
顯示幕。通用PnP顯示幕
設備。DISPLAY4
配接器。NVIDIA Quadro P2000
(1280 x 1024 x 32 bpp) 60Hz 默認向上,連接 (1920,0)
顯示幕。通用PnP顯示幕
設備。DISPLAY8
配接器。配接器:DisplayLink USB設備
(1920 x 1080 x 32 bpp) 60Hz 默認向上,連接,主要 (0,0)
-1920
1920
0
()之后的文本。,第一次出現之前的文本。**的行),但我希望這些行是在回圈內。我嘗試了下面標有*的行,但是腳本退出了,我不知道錯誤是什么。希望是一個微不足道的缺失。請原諒我的批處理腳本知識不足。
@echo off
setlocal EnableDelayedExpansion
設定Cnt=0
FOR /F "tokens=*" %%a IN ('findstr "default up, attached" "%userprofile%~.txt"' ) DO (
設定/a Cnt =1
設定結果=%%a
for %%b in ("%result:(=" "%") do set "result=%%~b" <= * 這幾行不起作用!!
for /f "tokens=1 delims=," %%c in ("%result%") do set "result=%%~c" <= * 這幾行不作業!!
呼叫Set Monitors[%%Cnt%]=!result!
)
for %b in ("%Monitors[1]:(=" "%") do set "Monitors[1]=%%~b" <= ** THESE LINES WORK.
for %b in ("%Monitors[2]:(=" "%") do set "Monitors[2]=%%~b" <= ** THESE LINES WORK.
for %b in ("%Monitors[3]:(=" "%") do set "Monitors[3]=%%~b" <= ** THESE LINES WORK.
for /f "tokens=1 delims=," %%c in ("%Monitors[1]%") do set "Monitors[1]=%%~c" <= ** THESE LINES WORK.
for /f "tokens=1 delims=," %%c in ("%Monitors[2]%") do set "Monitors[2]=%%~c" <= ** THESE LINES WORK
for /f "tokens=1 delims=," %%c in ("%Monitors[3]%") do set "Monitors[3]=%%~c" <= ** These LINES WORK.
echo %Monitors[1]%
echo %Monitors[2]%
echo %Monitors[3]%
暫停
@Echo off
:# 替換為實際檔案名。
Set "File=%~dp0in.txt"
Set "Content=(-?d ,d )$"
Set "Prefix=^.*?, w ("
Set "Suffix=,d*)"
:# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_regular_expressions?view=powershell-7.1
Set "[i]=1"
對于/f "Delims="%G in('
powershell -nologo -noprofile -c ^
"(GC "%File%") -match '%Content%' | ForEach {"$_" -replace '%Prefix%' -replace '%Suffix%'}
')Do Call Set /A "[i] =1","Monitor[%%[i]%]=%%G"
Set Monitor[.
Goto :Eof
FOR命令。第一個FOR將通過小括號將其分割開來,并將給你第二組小括號之間的一切。 然后把這個輸出放到另一個FOR命令中,在逗號處分割數值。@echo off
REM使用小括號作為分隔符
FOR /F "tokens=3 delims=()" %%G IN ('findstr "default up, attached" "file.txt"' ) DO (
REM使用逗號作為變數最后分割的分隔符。
FOR /F "TOKENS=1 delims=," %%H IN ("%%~G") DO ECHO %%~H
)
