Извлечение имен файлов из вывода консоли SVN
Моя черепаха СВН SVN update
Команда обычно возвращает мне этот вывод:
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 ответ
Кажется, я нашел решение с 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%