Svn कंसोल आउटपुट से फाइलनाम निकालना


1

मेरा कछुआ एसवीएन 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

क्या यह बल्लेबाजी करना है, या क्या यह vbscript या जाग भी हो सकता है? ऐसा लगता है कि आवश्यकता एक आउटपुट फ़ाइल से फ़ील्ड 1 और फ़ील्ड 2 निकालने की है, लेकिन चुनौती फ़ील्ड की परिभाषा है, विशेष रूप से फ़ील्ड 2 के लिए। यह अंतरिक्ष समाप्त नहीं है। यह उद्धरणों में नहीं लिपटा है। मुझे नहीं लगता कि आप फ़ील्ड 2 के लिए एक सटीक पर्याप्त परिभाषा बना सकते हैं - आप उदाहरण के लिए "C 'कुछ' file5.txt 'B" कैसे संभालेंगे - इस उदाहरण के लिए आप जो भी परिभाषा का उपयोग करते हैं वह गलत है।
Ian McGowan

एक प्रस्तावित दृष्टिकोण जोड़ने के लिए - यदि फ़ील्ड 2 के बाद कोई उद्धरण संभव नहीं है, तो फ़ील्ड दो को "आगे की खोज करने वाली पंक्ति में अंतिम पंक्ति में सब कुछ आगे की पंक्ति में पहले उद्धरण से सब कुछ परिभाषित करें"? मैं कल्पना कर सकता हूँ कि बहुत आसानी से vbscript, perl या awk में, लेकिन बैट में नहीं।
Ian McGowan

जवाबों:


0

मुझे लगता है कि शब्दाडंबर के साथ एक समाधान मिल गया है, के स्थान पर set file= निम्नलिखित के साथ लाइन

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

पॉवरशेल लेता है %line% (वहाँ यह कहा जाता है $Env:line ), और जगह ^[^']*' कुछ नहीं के साथ, और बदल देता है '[^']*$ कुछ नहीं के साथ, और फिर उस स्ट्रिंग को लौटाता है जिसे तब पकड़ा जाता है for /f फिर से और में डाल दिया %file%

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.