MS DOS script per DIR primi 10 solo file, in ordine decrescente

Sto usando dir abc*.*/o:-d/b >> "testfile1.txt" per ottenere l’output in ordine decrescente. C’è un modo per avere solo 5 /10 file di output. In realtà voglio memorizzare le ultime 5 (ordinati per Data di modifica dei file in testfile1.txt.

Apprezzo la tua risposta

OriginaleL’autore user1594788 | 2012-08-13

3 Replies
  1. 7
    @echo off
    setlocal
    set /a "n=0, limit=5"
    >"testfile1.txt" (
      for /f "eol=: delims=" %%F in ('dir /o-d /b abc*.*') do (
        echo %%F
        2>nul set /a "n+=1, 1/(limit-n)"||goto :break
      )
    )
    :break
    

    Ho volutamente dividere per 0 a rilevare quando il limite è stato raggiunto. Si potrebbe semplicemente utilizzare un’istruzione IF, invece, ma che richiederebbe un ritardo di espansione, in ritardo, l’incremento sarebbe corrotti o un nome di file che contiene !. Una soluzione adeguata con ritardo di espansione deve passare in ritardo di espansione on e off all’interno del loop.

    Grazie dbenham, Funziona Brillantemente, sei una stella…

    OriginaleL’autore dbenham

  2. 3

    So che sono un po ‘ in ritardo su questo, ma, come questo, invece:

    @echo off
    for /f "tokens=1* delims=:" %%a in ('dir abc*.*/o:-d/b ^| findstr /n .') do if %%a leq 5 echo.%%b>>"testfile1.txt"
    

    Ecco quello che ho fatto per fare questo lavoro:

    • Di sottofondo la vostra istruzione dir in findstr per il numero di ogni riga (dir
      abc*.*/o:-d/b | findstr /n .
      )
    • Corse attraverso un ciclo for per
      riga separata #’s dal contenuto (utilizzando “tokens=1*
      delims=:”
      )
    • Utilizzata un’istruzione if per verificare la corrente di linea è inferiore o pari a “5” (se %%leq 5…)
    • Esportato tutte le linee che corrispondono al file specificato (eco.%%b>>”testfile1.txt”)

    Edit: cambiato ‘findstr /n .*‘ a ‘findstr /n .‘, come non ci sono righe vuote anche guardare fuori per (vedi commenti qui sotto).

    +1; È possibile semplificare la tua FINDSTR regex per .. L’asterisco non è necessario 🙂
    Grazie @dbenham. Tuttavia, quando I tubi di un file in findstr, le righe vuote vengono ignorate solo con .. Credo ho bisogno di star modificare i caratteri jolly ‘zero o piu’ risultati. Mi potrebbe essere necessario modificare il metodo di cui sopra, comunque, dato che sarà soffocare le righe che iniziano con i due punti (@Jeb fatto notare in un altro thread). Alla ricerca di una soluzione per ora…
    Sì, ma in questo caso non devi preoccuparti di righe vuote. I dati provengono da DIR /B, non un file. Così il * non è necessario. Inoltre, non è necessario preoccuparsi di linee che iniziano con il carattere di fine linea (EOL (; per impostazione predefinita), perché si sa che ogni riga inizia con un numero.
    Ah, ottimo punto (senza righe vuote inviato da dir). Il carattere di fine linea (EOL… quello che intendevo era colon delimitatore sto usando per separare i numeri di riga dal contenuto (aggiunto da findstr). Perché il ciclo for crolla delimitatori consecutivi in uno, le righe che iniziano con un colon si hanno i due punti tolse dal mio codice di cui sopra. Il punto è ancora valida se: nessuna delle linee da un dir /b uscita dovrebbe iniziare con (o contenere) i due punti.

    OriginaleL’autore Seth McCauley

  3. 0

    Questo hanno essere un file batch? Questo sarebbe banale in PowerShell.

    Di farlo con un semplice file batch, avrete bisogno di qualcosa di simile alla testa di utilità, a prendere solo le prime righe di output.

    È possibile adattare la soluzione alle tue esigenze (notare la sezione nella risposta del piccolo “winhead.cmd” script):
    Comando Batch a prendere solo la prima riga da ingresso

    OriginaleL’autore dodexahedron

Lascia un commento