Первый символ исчез из чтения команды [Пакетный файл] - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь прочитать вывод команды (которая выводится в несколько строк) и использовать произвольное количество этих строк. Поскольку я не знаю ни количества строк, ни количества строк, которые будут использоваться, мне нужно проанализировать и, возможно, использовать каждую строку в цикле, поэтому у меня есть setlocal enabledelayedexpansion.

Ниже приведен фрагмент кода, который показывает процесс принятия команды и чтения каждой строки (еще не используя ее, просто прочитав ее, чтобы убедиться, что это работает (чего не происходит)):

@echo off
setlocal enabledelayedexpansion

for /f "tokens=*" %%i in ('svn status') do (
echo %%i
set file=%%i
echo *!file!
)

Проблема, с которой я сталкиваюсь, заключается в том, что считываемые значения %%i не верны в строке for. Первый символ отсутствует в первой строке ввода (что важно, потому что я использую первую строку, чтобы решить, использовать эту строку или нет).

Вывод из моего кода выглядит следующим образом:

       Dir0\TestDoc7.txt
?       StatusFile.txt

Принимая во внимание, что я запускаю этот код:

copy /y NUL StatusFile.txt >NUL
>StatusFile.txt (
  svn status
)

(Это просто еще один способ увидеть реальный вывод svn status) Я получаю правильный вывод в текстовый файл:

!       Dir0\TestDoc7.txt
?       StatusFile.txt

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

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

1 Ответ

0 голосов
/ 12 января 2019

Причина - EnableDelayedExpansion, который съедает восклицательных знаков
Ваш выбор tokens=* также удалит все ведущие пробелы из линий.

@echo off
for /f "tokens=1*" %%A in ('svn status') do (
    if "%%A" equ "!" (
        Rem do whatever 
    ) else If "%%A" equ "?" (
        Rem do something else rest of the line is in %%B
    ) else (
        Rem no ! or ? first space sep. content is in %%A rest of the line is in %%B
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...