Для цикла и команды поиска

Для цикла и команды поиска

Я хотел бы разобрать только номер строки команды find. Вот моя попытка:

FOR /f "tokens=1 delims=[" %a IN ('find /n "string" 2.txt') DO @ECHO %a

но он возвращает что-то вроде этого:

---------- 2.TXT
2]string

вместо просто:

---------- 2.TXT

Когда я меняю разделитель на ] - все в порядке - %a содержит:

---------- 2.TXT
[2

как и ожидалось.

решение1

FIND
Search for a text string in a file & display all the lines where it is found.

Syntax
      FIND [/V] [/C] [/N] [/I] "string" [pathname(s)]

Key
   "string"    The text string to find (must be in quotes).

   [pathname]  A drive/file(s) to search (wildcards accepted).

  ⇉  /V        Display all lines NOT containing the specified string.

     /C        Count the number of lines containing the string.

     /N        Display Line numbers.

     /I        Ignore the case of characters when searching for the string.

  [/off[line]] Do not skip files that have the offline attribute set.

1.Вам не нужно определять разделитель как"["или"]"

> for /f delims^= %a IN ('find/n "string" 2.txt^|find/v "["')do @echo=%a

Наблюдение:Используйте один пробел в:delims^=ESPACE%a

2.Просто добавьте^|find/v "[", чтобы пропустить строки, содержащие[n]на выходе

> for /f delims^= %a IN ('find/n "string" 2.txt^|find/v "["')do @echo=%a
---------- 2.TXT
  • Чтобы получить только имя файла:
> for /f tokens^=1*delims^=-^  %a IN ('find/n "string" 2.txt^|find/v "["')do @echo=%a
2.TXT

Наблюдение:Используйте два пробела в:delims^=-^ESPACEESPACE%a


Дополнительные ресурсы:

Связанный контент