簡體   English   中英

使用Windows命令行在文本文件中的最大記錄長度

[英]Maximum record length in a text file using Windows command line

如何使用Windows命令在文本文件中查找最大記錄長度。 即,它應該輸出該文件中找到的行的最大長度。

僅使用本機Powershell實用程序:

Get-Content C:\\textfile.txt | Measure-Object -Property length -Maximum

要獲得最長行的實際內容

Get-Content C:\\textfile.txt | Sort-Object -Property length | Select-Object -last 1

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /a maxlength=0
FOR /f "delims=" %%a IN (q27898945.txt) DO (
 SET "line=%%a"
 CALL :calc
)

ECHO maxlength IN file is %maxlength%

GOTO :EOF

:calc
SET "line2=!line:~%maxlength%!"
IF DEFINED line2 set/a maxlength+=1&GOTO calc
GOTO :eof

我使用了一個名為q27898945.txt的文件, q27898945.txt包含一些隨機文本進行測試。

將顯示對內容的一些敏感性 - 例如,包含%text%的行將被錯誤計算。

對於wc -L的批量實現(將輸入文件作為批處理的參數)

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "tempFile=%temp%\%~nx0.%random%.tmp"

    for %%f in ("%~1") do (
        cmd /c "(type "%%~ff"&echo(&echo()" | findstr /o /r /c:"^" > "%tempFile%"
        setlocal enabledelayedexpansion
        set /a "max=0", "last=0"
        for /f "usebackq delims=:" %%a in ("%tempFile%") do (
            set /a "length=%%a-last-2"
            set "last=%%a"
            if !length! gtr !max! set "max=!length!"
        )
        echo !max! "%%~ff"
        endlocal
        del /q "%tempFile%" 2> nul 
    )

我們做的是使用findstr生成一個臨時文件,其中所有行都以文件內部的偏移為前綴。 其余的是減去當前行與前一行的偏移量的偏移量來計算其長度。 將兩條附加行添加到所使用的臨時文件中( for /f加載文件比檢索命令輸出快得多),以確保正確處理文件中的最后一行

使用我的JREPL.BAT實用程序 - 一個混合的JScript /批處理腳本,可以在XP以后的任何Windows機器上運行。

jrepl "$" "if ($off>max) max=$off;false" /f test.txt /jbeg "var max=0" /jend "output.WriteLine(max)" /jmatch

如果要在腳本中使用JREPL,請使用CALL作為前綴。

如果要捕獲批處理腳本中變量的值:

for %%N in (
  'call jrepl "$" "if ($off>max) max=$off;false" /f test.txt /jbeg "var max=0" /jend "output.WriteLine(max)" /jmatch'
) do set /a max=%%N

暫無
暫無

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

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