извлечь 6-е слово в 4-й строке текстовых файлов. Используя CMD - PullRequest
0 голосов
/ 07 октября 2018

Я пытался извлечь 6-е слово из 4-й строки, но цикл не работает, кто-нибудь может сказать, что является ошибкой в ​​синтаксисе используемых команд

@echo off
for %%a in ("D:\H Drive\subh\test\OUTPUT\*.*") do (
for /f "usebackq tokens=6 delims= " %%g IN ('more %%a | findstr /n $ | findstr /b "4:"') do (
set var=%%g
echo %var%
)
)
pause

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вот еще один способ сделать это в оболочке cmd.exe.

SET "FILELIST=D:yy\H Drive\subh\test\OUTPUT\*.*"

powershell -NoProfile -Command ^
    "Get-ChildItem -Path \"%FILELIST%\" |" ^
        "ForEach-Object {" ^
             "Get-Content -Path $_.FullName | Select-Object -Skip 5 -First 1 | ForEach-Object { ($_ -split '\s+')[5] }" ^
        "}"
0 голосов
/ 07 октября 2018

Вы можете использовать опцию skip в цикле for /f, чтобы перейти непосредственно к правой строке, когда слово найдено, мы используем команду goto, чтобы разорвать цикл:

@echo off

for %%a in (*.txt) do call:get6 "%%a"
echo done!!
exit/b

:get6

for /f "skip=3 tokens=6" %%b in ('type "%~1"') do (
    set "$6=%%b"
    goto:next
)
exit/b

:next
echo %$6%

РЕДАКТИРОВАТЬ:

После комментария @stephan здесь тот же код, используя оригинальный метод findstr /n:

@echo off

for %%a in (*.txt) do call:get6 "%%a"
echo done!!
exit/b

:get6

for /f "tokens=6" %%b in ('type "%~1" ^| findstr /n $ ^| find "4:"') do (
    set "$6=%%b"
    goto:next
)

exit/b

:next
echo %$6%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...