Есть простое решение, которое намного проще, чем использование цикла " for
".
Давайте возьмем вывод из dir/o-d
(в dir
обратном порядке по дате) в качестве примера.
Например, если вы хотите вывести строки с 1 по 16, используйте:
dir/o-d|findstr/n ^^|findstr "^[1-9]: ^1[0-6]:"
Например, если вы хотите вывести строки с 16 по 45, используйте:
dir/o-d|findstr/n ^^|findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"
Образец вывода:
16:08/08/2016 08:43 AM <DIR> nacl_sdk
17:11/05/2016 10:48 PM <DIR> 3b 2
18:28/04/2016 02:47 PM <DIR> sample
19:22/04/2016 10:07 PM <DIR> mysql test
20:16/04/2016 01:22 AM <DIR> 3b
21:16/04/2016 01:10 AM 2,706 errorlog
22:16/04/2016 12:53 AM 0 accesslog
...
Сломать:
Во- первых, сбросить весь вывод с помощью dir/o-d
.
Затем добавьте каждую строку с помощью " $Num:
", используяfindstr/n ^^
^
означает соответствие начала строки, и ^^
просто требуется экранированная версия, потому что мы находимся в cmd.
Примечание: вам нужно использовать findstr
это, потому find/n" "
что не будут совпадать строки без пробелов`.
Наконец, обрезать вывод с помощью findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"
.
^1[6-9]:
это регулярное выражение для 16 до 19.
^[2-3][0-9]:
является регулярным выражением для 20 - 39.
^4[0-5]:
является регулярным выражением для 40 до 45.
findstr "a b c"
средства поиска строк , которые соответствуют либо выражения a
, b
или c
.
Также см. Https://stackoverflow.com/q/8844868/632951.