Найдите текстовый файл и добавьте его, когда указанная строка c найдена с помощью командного файла - PullRequest
0 голосов
/ 01 августа 2020

У меня есть текстовый файл, который я пытаюсь редактировать с помощью пакетного сценария. Конкретно говоря, файл содержит список параметров, и я пытаюсь добавить путь (строку) сразу после одного из параметров (также строки).

Для этого я написал сценарий ниже, который предполагается to

  • Итерировать по каждой строке файла
  • Объедините параметр и путь вместе в новую строку, если строка содержит параметр, который я ищу.
  • Вывести все (неизмененные и измененные строки) в новый текстовый файл.

В моем случае параметр, который я ищу в моем файле, - «image».

К сожалению, хотя Основная проблема здесь, вероятно, в том, что я тупой, я не смог понять, почему это не работает, и был бы очень признателен за помощь.

Вот код:

@setlocal enableextensions enabledelayedexpansion
@echo off

push %~dp0
set "path=%UserProfile%"

REM iterate through each line of given txt file
for /F "delims="%%G in (settings.txt) do (
    set line =%%G
    if not x%line:image=%==x%line% set "newline=%line%%path%

    echo !newline! >> newFile.txt
)
popd
pause
exit /b 0

Для справки, я использовал эту страницу , чтобы написать свой код.

Заранее спасибо

1 Ответ

0 голосов
/ 01 августа 2020

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

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

Set "fileIn=%~dp0settings.txt"
Set "strGet=image"
Set "strAdd=%UserProfile%"
Set "fileOut=%~dp0newFile.txt"

(
    For /F Delims^=^ EOL^= %%G In (
        '""%__AppDir__%find.exe" /V /N "" 0< "%fileIn%" 2> NUL"'
    ) Do (
        Set "strLine=%%G"
        SetLocal EnableDelayedExpansion
        If /I Not "!strLine:%strGet%=!" == "!strLine!" (
            Echo=!strLine:*]=!%strAdd%
        ) Else Echo=!strLine:*]=!
        EndLocal
    )
) 1> "%fileOut%"

Я не собираюсь объяснять, как это работает, чтобы Чтобы узнать, вы должны попытаться выполнить его команду за командой, используя каждый из соответствующих выходных данных справки. Единственное, что вам нужно изменить, это четыре определения переменных в строках 4 .. 7 соответственно. Обратите внимание, что расширение переменных и подстановка подстроки не работает ни с чем, что вы хотите поместить в %strGet%, это имеет ограничения!

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