Как я могу удалить определенные слова из строки, но поместить все остальное в строку / переменную с помощью пакета? - PullRequest
0 голосов
/ 03 февраля 2019

Я делаю пакетную программу, которая должна взять эту строку в текстовом файле:

Random Characters: 93h4-283ed-93j2-je82

, взять ТОЛЬКО 93h4-283ed-93j2-je82 и поместить ее в переменную.(это первая строка в текстовом файле)

Как я могу это сделать?Я посмотрел вокруг на веб-страницах, но большинство ответов, которые я нашел, не сработало так, как я хотел.

Я оглянулся на Переполнение стека и другие источники, но они заставили всю строку исчезнуть, если в ней были какие-то словатогда как я хочу взять только часть строки и поместить ее в пакетную переменную / строку.

text.txt

Random Characters: 93h4-283ed-93j2-je82

textf.txt должен быть

93h4-283ed-93j2-je82

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Основано исключительно на том, что вы указали, т. Е. Разделить первую строку text.txt, сохраняя все после первой последовательности двух символов, : и вывод на textf.txt.

@<"text.txt" (Set/P "Var="&Call Echo(%%Var:*: =%%)>"textf.txt"
0 голосов
/ 03 февраля 2019

Если вы просто хотите взять Random Characters в виде строки, это можно сделать очень просто в цикле for.Мы используем type text.txt, чтобы построчно выводить файл в переменную.Оттуда мы ищем строки, содержащие Random Characters:, используя find /I "Random Characters:".Наконец, мы можем извлечь числа, используя "tokens=1-2,3* delims= " внутри цикла for.

Rem | Get .txt To String
FOR /F "tokens=*" %%A IN ('type text.txt') DO (

    Rem | Find The First "Random Characters" Line
    for /f "tokens=1-2,3* delims= " %%B in ('echo %%A^| find /I "Random Characters:"') do (

        Rem | Set String
        Set "String=%%D"

        Rem | Break Loop
        Goto Finished

    )
)

:Finished

Echo %String%

Если вы хотите обновить текстовый файл и удалить Random Characters:, тогда мы можем добавитьфункция замены для редактирования текстового файла.

@ECHO OFF
@setlocal EnableDelayedExpansion

Rem | Configuration
Set "FileLocation=text.txt"

Rem | Get .txt To String
FOR /F "tokens=*" %%A IN ('type !FileLocation!') DO (

    Rem | Find The First "Random Characters" Line
    for /f "tokens=1-2,3* delims= " %%B in ('echo %%A^| find /I "Random Characters:"') do (

        Rem | Set SearchText & ReplaceText
        Set "SearchText=%%A"
        Set "ReplaceText=%%D"

        Rem | Break Loop
        Goto EditString

    )
)
goto :EOF

:EditString

REM | Make sure we only edit the Random Characters: line.
FOR /F "delims=" %%n IN ('findstr /n "^" %FileLocation%') DO (
    SET line=%%n
    SET Modified=!line:%SearchText%=%ReplaceText%!
    SET Modified=!Modified:*:=!

    REM | Output the entire edited INI to a temporary file.
    >> %FileLocation%.TEMP ECHO(!Modified!
)

Rem | Delete Original File, Restore New
DEL %FileLocation%
REN %FileLocation%.TEMP %FileLocation%

Goto :EOF

Входной необработанный текстовый файл:

Random Characters: 93h4-283ed-93j2-je82
Random Characters: 93i4-283ed-93j2-je82
Hello My Name John
Random Characters: 93j4-283ed-93j2-je82
Nice To Meet You
Random Characters: 93k4-283ed-93j2-je82
How Is Your Day
Random Characters: 93l4-283ed-93j2-je82

Выходной необработанный текстовый файл:

93h4-283ed-93j2-je82
Random Characters: 93i4-283ed-93j2-je82
Hello My Name John
Random Characters: 93j4-283ed-93j2-je82
Nice To Meet You
Random Characters: 93k4-283ed-93j2-je82
How Is Your Day
Random Characters: 93l4-283ed-93j2-je82

Имейте в виду, я оставил Rem комментариев для каждого процесса сценария.Для получения дополнительной справки по командам введите в командной строке следующую команду:

  • set /?
  • for /?
  • if /?
  • goto /?
  • отл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...