2015-09-03 2 views
-2

Я использую командный файл в шаге tfs build. Я хотел разобрать текстовый файл из пакетного скрипта.Как использовать Regex в пакетном файле

содержимое файла что-то вроде этого

------------------------------------------------------------------------------- 
Changeset: 267406 
User: myname 
Date: Wednesday, August 12, 2015 5:33:28 PM 

Comment: 
    TFS Changes 

Items: 
    edit $/dummyPath/uDClient/PushVersion.bat 
    add $/dummyPath/uDClient/request.json 

------------------------------------------------------------------------------- 
Changeset: 267356 
User: username 
Date: Wednesday, August 12, 2015 12:16:58 PM 

Comment: 
    Initial check-in 

Items: 
    edit $/dummyPath/UserControls/Welcome.ascx 
    edit $/dummyPath/UserControls/Welcome.ascx.cs 
    edit $/dummyPath/UserControls/Welcome.ascx.designer.cs 
    deleted $/dummyPath/UserControls/p1.ascx 

Требуется вывод будет

$/dummyPath/uDClient/PushVersion.bat 
$/dummyPath/uDClient/request.json 
$/dummyPath/UserControls/Welcome.ascx 
$/dummyPath/UserControls/Welcome.ascx.cs 
$/dummyPath/UserControls/Welcome.ascx.designer.cs 
$/dummyPath/UserControls/p1.ascx 

Я хотел сделать это синтаксический разбор в пакетном сценарии, если это не представляется возможным, то я пойду C# Regex через служебное приложение.

Так может кто-нибудь предложить мне, как я могу это сделать в файле сценария пакетного

Я использую следующую команду, чтобы получить необходимую выходную

for /f "tokens=2" %i in ('FINDSTR /C:^edit p.txt') do echo %i 

, но я должен бежать же commond три раза (для оных , удалить также) в C# регулярное выражение можно указать список слов, чтобы соответствовать

*(add|delete|edit)\s* 

Как я могу использовать другие подходящие слова в Findstr.

+0

Вы должны продемонстрировать некоторые усилия решить проблему, чтобы получить ответ. –

+1

хорошей отправной точкой является 'findstr' - команда, которая поддерживает регулярные выражения; введите 'findstr /?' для информации, как это работает ... – aschipfl

ответ

0

Вы можете попробовать использовать сценарий Power Shell для этого.

Вот PowerShell скрипт, который производит желаемый результат на указанный вами вход:

select-string -Path 'C:\source\source.txt' -Pattern '\$.*' -AllMatches | % { $_.Matches } | % { $_.Value } 
1

Этот код с текстом в file.txt напечатает выход под ним:

@echo off 
for /f "tokens=1,* delims=$" %%a in ('find "/" ^<"file.txt"') do echo $%%b 

выход:

$/dummyPath/uDClient/PushVersion.bat 
$/dummyPath/uDClient/request.json 
$/dummyPath/UserControls/Welcome.ascx 
$/dummyPath/UserControls/Welcome.ascx.cs 
$/dummyPath/UserControls/Welcome.ascx.designer.cs 
$/dummyPath/UserControls/p1.ascx 
+0

Привет, спасибо за ваш ответ, но мне нужны только те имена файлов, которые были либо изменены, либо добавлены (изменить | добавить). Этот wii дает мне все имена файлов. –

+0

@PavanTiwari. «Обязательный параметр put» в вашем вопросе - именно то, что в моем ответе. – foxidrive

Смежные вопросы