
Я хотел бы разобрать только номер строки команды 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
Дополнительные ресурсы: