Как я могу подключиться
Для цикла, который выполняется для всех файлов в папке и находит в каждой строке, затем добавляет эту строку в переменную. Мне нужен список файлов в папке + найдите в этой строке строку, содержащую «строку», и укажите эту строку
Именно это мне нужно: У меня есть папка и в ней разные файлы x.txt y.txt и многие другие Мне нужно поместить список этих файлов в CSV и найти строку, содержащую «строку», а затем поместить всю строку. пример:
db.csv
output x.txt "aaaaaa string aaaaaaa"
y.txt "asfdsaf string dfsadsa"
FOR %%i IN (folder/*.*) DO (
set var = find "text"
echo %%i ; var >> db.csv
)
Не испытано:
@echo off
setlocal enableDelayedExpansion
FOR %%i IN (folder\*.*) DO (
for /f "tokens=* delims = " %%# in ('type "%%~fi" ^| find "string"') do (
set "var=%%#"
)
echo %%i ; !var! >> db.csv
)
вам нужно отложенное расширение и вложенный цикл for для присвоения результата команды переменной
@MateuszF - сейчас у меня нет доступа к машине с Windows. Каков будет результат, если вы установите echo %%i
в строке перед внутренним циклом for?
@MateuszF - возможно, вы можете использовать FOR /D -> ss64.com/nt/for_d.html
@MateuszF сработал у меня, когда я заменил косую черту на обратную (скрипт также обновлен)
те же данные можно извлечь всего одной командой: findstr "text" "folder\*" >"db.csv"
(возможно, с помощью переключателя /i
). Затем замените :
на ;
с окружающим циклом for
.
(for /f "tokens=1* delims=:" %%a in ('findstr /i "test" "*"') do echo %%a;%%b)>"db.csv"
Если нет - пожалуйста, укажите более точно, что вы хотите (может быть, пример?).
Именно то, что мне нужно, это следующее: у меня есть папка и в ней различные файлы x.txt, y.txt и многие другие. Мне нужно поместить список этих файлов в csv и найти строку, содержащую «строку», а рядом поместить все пример строки: вывод db.csv x.txt "aaaaaa string aaaaaaa" y.txt "asfdsaf string dfsadsa"
ок, это я понял. Мой код работает для вас? Если нет - в чем проблема?
Нет, это не работает. Мне выдали пустой CSV FOR %%i IN (Zliczanie/*.*) DO ( (for /f "tokens=1* delims=:" %%a in ('findstr /i "string" " папка/*"') do echo %%a;%%i)>"db.csv" )
Вам не нужен другой for
. Просто используйте ту строку, которую я вам дал (очевидно, адаптируйте строку поиска и маску файла в соответствии с вашей средой) (нет необходимости перебирать файлы с помощью for
, поскольку findstr
уже это делает)
Я пробовал, но все время var пуст