विकर्म आउटपुट से अलग-अलग टेक्स्ट फाइल कैसे बनाएं


1

मैं एक विकी आउटपुट में प्रत्येक प्रविष्टि से व्यक्तिगत पाठ फ़ाइलें बनाना चाहता हूं।

अब तक मेरे पास है

WMIC.exe / नोड: स्थानीय होस्ट / नाम स्थान: \\ जड़ \ SecurityCenter2 पथ AntiVirusProduct DISPLAYNAME /Format:csv>AVlist.txt जाओ
\ SecurityCenter2 पथ \\ जड़ AntiSpywareProduct DISPLAYNAME / प्रारूप प्राप्त करें:: WMIC.exe / नोड: स्थानीय होस्ट / नाम स्थान सीएसवी >> AVlist.txt

निम्नलिखित के साथ मुझे एक सूची दें

नोड,
प्रदर्शितनाम MAINCOMPUTER, संख्या 1 एंटीवायरस
MAINCOMPUTER, संख्या 2 एंटीवायरस
नोड,
प्रदर्शन नाम MAINCOMPUTER, संख्या 2 एंटीवायरस
MAINCOMPUTER, संख्या 1 एंटीस्पवेयर

मैं जो करना चाहता हूं वह पाठ फ़ाइलों की एक श्रृंखला बनाना है जो कि सक्षम होगी


नंबर 1 एंटीवायरस। नंबर 2 एंटीवायरस। नंबर
1 एंटीस्पाइवेयर। टेक्स्ट

किसी भी डुप्लिकेट के बिना, किसी भी मौजूदा फ़ाइलों को अधिलेखित किए बिना और "नोड, डिस्प्लेनेम" को सहेजे बिना हेडर ने हर बार विकर्म चलाने के लिए बनाया ...

अब मैं कुछ दिनों के लिए इससे जूझ रहा हूं और एक बड़ी गड़बड़ के साथ आया हूं, जो भारी मात्रा में अस्थायी फ़ाइलों को बनाने और उन्हें हटाने के बाद निर्भर करता है ... सुरुचिपूर्ण नहीं, अति जटिल, मुझे बस इससे नफरत है। तो, मैं सोच रहा हूं कि क्या यहां के आसपास के किसी भी जादूगर के पास एक सरल समाधान होगा?

यहाँ मैंने अभी तक जो गड़बड़ की है। घटिया कोडिंग पर बहुत बारीकी से मत देखो।

WMIC.exe / Node: localhost / Namespace: \\ root \ SecurityCenter2 Path AntiVirusProduct को प्राप्त करें डिस्प्लेनेम
/Format:csv>AVlist.txt WMIC.EXE / Node: localhost / Namespace: \\ root \ SecurityCenter2 पथ AntiSpywareProduct का प्रदर्शन करें >> AVlist.txt
::
/ f "स्किप = 1 डीलिम्स =" %% इन (AVlist.txt) के लिए सफेद रिक्त स्थान निकालें (
सेट str = %% एक
सेट str =% str: '=%
सेट str =% str: =%
echo% str% >>% temp% \ filetmp.txt
)
xcopy% temp% \ filetmp.txt% ~ dp0 \ AVlist.txt / y
del% temp% \ filetmp .xt / f / q

:: डुप्लिकेट लाइनों को हटाएं
सेट्लोकल इनेबल्ड एक्सपीरिएंस
सेट इनपुटफाइल = AVlist.txt
सेट आउटपुटफाइल = AVlist2.txt

इको फ़ाइल को संसाधित किया जाना है

% inputfile%
इको टाइप करें ।

अगर मौजूद है Sorted.txt del Sorted.txt
सॉर्ट% inputfile% / O% temp% \ Sorted.txt

अगर मौजूद% outputfile% del% outputfile%
set lastline =
for / f "delims ==" "%% L in (Sorted.txt) do (
सेट करें itline = %% L
अगर नहीं"! "line! "=="-lastline "इको! इसलाइन! >>%
आउटपुटफाइल % सेट अंतिम समय = %% एल
)

del Sorted.txt

इको डुप्लिकेट्स हटाए गए:
इको।
सेटलोकल डिसेबल

:: हटाएं हेडर
ren AVlist2.txt AVlist2.txt.old
findstr / v / b / c: "नोड, प्रदर्शित करें" AVlist2.txt.old> AVlist2.txt
प्रकार avlist2.txt
रोकें

ओह!

जवाबों:


2

अगर मैं सही समझूं कि आप क्या करने की कोशिश करेंगे, तो यह बैच करेगा:

@Echo off
For /f "skip=1 tokens=1,2 delims=," %%A in (
  'WMIC.exe /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:csv^|find "," '
) Do For /f "delims=" %%C in ("%%B") Do Find /I "%%A,%%C" "%%C.txt" >NUL 2>&1 ||(>> "%%C.txt" Echo:%%A,%%C)

For /f "skip=1 tokens=1,2 delims=," %%A in (
  'WMIC.exe /Namespace:\\root\SecurityCenter2 Path AntiSpywareProduct Get displayName /Format:csv^|find ","'
) Do For /f "delims=" %%C in ("%%B") Do Find /I "%%A,%%C" "%%C.txt" >NUL 2>&1 ||(>> "%%C.txt" Echo:%%A,%%C)

  • अस्थायी फ़ाइलों और छंटाई की कोई आवश्यकता नहीं है,
  • सीधे साथ wmic उत्पादन को पार्स एक for /fऔर
  • skip=1 हेडर से छुटकारा पाने के लिए,
  • tokens=1,2 delims=,"लाइनों को विभाजित करने और स्टोर nodeकरने के लिए %%Aऔर displaynameकरने के लिए%%B
  • find गंतव्य फ़ाइल में प्रविष्टि पहले से मौजूद है या नहीं यह जाँचने के लिए।

EDIT3 फिक्स्ड बैच, अब काम करना चाहिए।


बहुत करीब है, और मेरे पिछले मेस की तुलना में बहुत साफ है ... मैंने नाम स्थान टैग के लिए बदलाव किया क्योंकि मुझे एहसास नहीं था कि मंच डबल बैकस्लैश पसंद नहीं है ... लेकिन कोड पर वापस, मुझे अभी भी नहीं मिलता है निम्नलिखित त्रुटि संदेश "फ़ाइल नाम, निर्देशिका नाम या वॉल्यूम लेबल सिंटैक्स गलत है।"
फ्लेवर-डी

उत्तर का संपादन किया। यह जानने के लिए कि त्रुटि क्या है / जहां अंत में प्रतिध्वनि और एक विराम के साथ बैच चलाया जाता है।
लॉटिंग्स 21

मैंने सिर्फ एक शेल में कोड चलाया है और ऐसा लगता है कि समस्या (>> "%% B.txt" इको: %% A, %% B) भाग में है। मैंने नाम स्थान का पता भी तय कर दिया है ताकि आप इसे अपनी मशीन पर चला सकें।
फ्लेवर-डी

समस्या यूनिकोड में धिक्कार है, जो वर्तमान कोडपेज में परिवर्तित हो जाता है, लेकिन cr,cr,lfअनुक्रम को छोड़ देता है जिसे फ़िल्टर करना पड़ता है। उपरोक्त बैच को बदलने के तरीके पर।
लोटपिंग्स

मैं यह भी पता नहीं लगा सकता कि एमएस ने ऐसा करने का फैसला क्यों किया ... इसीलिए अपनी स्क्रिप्ट की कोशिश में मैंने प्रविष्टियों में हर जगह को हटा दिया। इससे मुझे थोड़ी मदद मिली ... मुझे लगता है।
फ्लेवर-डी

2

यहाँ मैं अंत में क्या बना रहा हूँ

ऊपर दिए गए उत्तर की तरह अच्छा नहीं है लेकिन यह अभी भी काम करता है।

For /f "skip=2 tokens=1,2 delims=," %%A in (     
  'WMIC.exe /Node:localhost /Namespace:\\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:csv '
) Do (    
set str=%%a     
set str=%str:'=%    
set str=%str:,=%    
)|Find /i "%%A,%%B" "%%B.txt" >NUL 2>&1|(echo.>>"%%B.txt")    

लेकिन जब से मुझे सिंगल लाइन स्क्रिप्ट पसंद आई है, मैं इस समाधान को सबसे अच्छे से देख रहा हूं

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