Неудивительно, что официальная документация на самом деле не помогает понять, как команда обрабатывает результат команды вместо списка файлов, и почему она вообще называется «FOR». Да, я уже знаю, что stackoverflow полон подобных вопросов, но, по-видимому, поскольку на пакетные сценарии влияет так много «ломающих» факторов, что даже неопытному программисту трудно не потеряться в тысячах исключений и сделать- ноты, которые могут повлиять на результат. Моя цель, помимо изучения наилучшего возможного ответа, состоит в том, чтобы сформулировать достаточно общий вопрос, чтобы представить вопрос, который, вероятно, является наиболее распространенной задачей, включая команду FINDSTR:
ВОПРОС:
Как получить выходные данные FINDSTR таким образом, чтобы я мог вычислять каждую результирующую строку по очереди, возможно, ВНУТРИ цикла?
Самый «общий» (пакетный bs-доказательство, если вы понимаете, что я имею в виду) пример, который я могу сделать, следующий:
Допустим, это secret_file.txt.
some not intersting line
A very intersting line = "secret1";
some not intersting line
A very intersting line = "secret2";
some not intersting line
A very intersting line = "secret3";
some not intersting line
Теперь с помощью команды findstr я могу вывести каждую «секретную» строку следующим образом:
findstr /R /C:"secret.\"" secret_file.txt
A very intersting line = "secret1";
A very intersting line = "secret2";
A very intersting line = "secret3";
Но этот результат просто бесполезен без дальнейшего анализа, верно? В любом случае, я мог бы использовать ctrl-F над любым текстовым читателем/редактором, скажем, теперь я хочу вывести каждую строку ОДИН ЗА РАЗ, чтобы я мог ее вычислить, например, сохраняя каждый секрет в переменную, а затем используя эта переменная каким-то образом (на самом деле не имеет значения, как, мы можем просто повторить ее, чтобы все было просто).
Теперь все согласны с тем, что для такого рода задач необходим цикл FOR. Цитируя https://ss64.com/nt/for.html в синтаксисе, мой скрипт .bat должен выглядеть так:
@echo off
FOR /F %%A IN ('findstr /R /C:"secret.\"" secret_file.txt') DO ECHO Batch script language is completely fine, good job Microsoft!
Это просто не дает никакого результата, может кто-нибудь объяснить мне, почему? Моя гипотеза заключалась в том, что выходные данные команды findstr находятся в несовместимом формате с командой FOR, не то чтобы я мог проверить или что-то в этом роде, поскольку источник закрыт, а документация даже не удосужилась определить слово String. Я готов предоставить любые подробности и даже отредактировать вопрос, чтобы он был более заметен для желающих быть забытыми Microsoft пакетными скриптами.