batchscript: чтение файла построчно и извлечение путей - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу прочитать содержимое файла построчно, а затем в каждой строке я хочу получить только пути.

sample.txt:

\.\docusp\ui\test\java\services\gway->\.\docusp\ui\test\java\pserv\com\controller\services\gway  pserver\2 (5660\1) (backed) (elink)
\.\docusp\ui\test\java\pserv\services\run->\.\docusp\ui\test\java\pserv\com\controller\services\rip  pserver\1 (376\1) (backed) (elink)

Вывод:

path: \.\docusp\ui\test\java\services\gway
target: \.\docusp\ui\test\java\pserv\com\controller\services\gway
path: \.\docusp\ui\test\java\pserv\services\run
target:\.\docusp\ui\test\java\pserv\com\controller\services\rip 

test.bat:

@echo off
for /f "delims=" %%a in (C:\sample.txt) DO ( 
    ECHO Line is: %%a
    set line=%%a

    for /f "tokens=1,2 delims=->" %%a in ("%line%") do (
        echo %%a
        echo %%b
        set path=%%a
        set target=%%b
        REM target contains the substring after ->. Want to remove  "pserver\2 (5660\1) (backed) (elink)" string
    )
)

В каждой строке указана цель,

\.\docusp\ui\test\java\pserv\com\controller\services\rip  pserver\1 (376\1) (backed) (elink)

Необходимо удалить pserver\1 (376\1) (backed) (elink), и цель должна содержать только \.\docusp\ui\test\java\pserv\com\controller\services\rip.

Примечание: путь цели может содержать пробел между ними. на основе пробела и получить подстроку не получится.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 11 апреля 2020

Проблема здесь в том, что вы не понимаете подробностей вашей проблемы, которые важны, поэтому я должен сделать предположение об этих двух моментах:

  • Разделение между целью и частью, которую вы хотите удалить, это ДВА ПРОСТРАНСТВА , как показано в прилагаемом файле sample.txt.
  • Когда вы сказали "целевой путь может содержать пробел между ними" Я предполагаю, что целевой путь может содержать ОДИН ПРОБЕЛ между ними, а не два соседних пробела ...

Рабочее решение, приведенное ниже, основано на таких предположениях.

@echo off
setlocal EnableDelayedExpansion

for /f "delims=" %%a in (sample.txt) DO ( 
    ECHO Line is: %%a
    set line=%%a

    for /f "tokens=1,2 delims=->" %%a in ("!line:  =-!") do (
        echo path: %%a
        echo target: %%b
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...