1

Моя команда обновления SVN SVN update Tortoise обычно возвращает мне такой вывод:

C:\proj>svn update
Updating '.':
A 'some-file1.txt'
D 'some-file2.txt'
Restored 'some-file3.txt'
U 'some'file4.txt'
C 'some file5.txt' B
At revision 123.

Обратите внимание, что за исключением первой строки (всегда начинающейся с Updating) и последней строки (всегда начинающейся с At), каждая строка всегда будет иметь:

  • действие в первом столбце. Это может быть буква или слово
  • файл во втором столбце, заключенный в одинарные кавычки. К сожалению, имена файлов могут содержать одинарные кавычки или пробелы внутри них!
  • возможно больше столбцов с одиночными буквами в них. Но мне плевать на них.

В командном файле, который я пишу, мне нужны действия и файлы. Действия, которые мне удается получить, но, кажется, файлы слишком сложны для меня. Технически, все, что я хочу, это все между первой одинарной кавычкой и последней одинарной кавычкой в строке.

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('"svn update"') DO (
    set line=%%a
    for /f "tokens=1" %%b in ("!line!") do (
        set action=%%b
        if "!action!" neq "Updating" (
            if "!action!" neq "At" (
                set file= >>> I DON'T KNOW WHAT TO DO HERE <<<
                echo We did !action! to !file!
            )
        )
    )
)

Как только этот пакетный файл работает правильно, он должен вывести:

We did A on some-file1.txt
We did D on some-file2.txt
We did Restored on some-file1.txt
We did U on some'file1.txt
We did C on some file1.txt

1 ответ1

0

Кажется, я нашел решение с powershell, заменив set file= на следующую

for /f "delims=" %%c in ('"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -Command ""$Env:line -replace '^^[^^'']*''' -replace '''[^^'']*$'"" "') DO (
    set file=%%c
)

Powershell принимает %line% (там он называется $Env:line), заменяет ^[^']*' ничем, заменяет '[^']*$ ничем и возвращает строку, которая затем перехватывается снова for /f и поместите в %file%

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .