विंडोज शेल स्क्रिप्ट के भीतर अगर दो फाइलें एक जैसी हैं तो कैसे जांचें?


2

मैं Windows NT (ish) शेल स्क्रिप्टिंग भाषा का उपयोग करके एक शेल स्क्रिप्ट लिख रहा हूं। (मेरे कंप्यूटर में विंडोज़ 10. है) मैं यह जांचना चाहता हूं कि क्या दो टेक्स्ट फाइलें समान हैं। यदि फाइलें समान हैं, तो मैं चाहता हूं कि मेरी स्क्रिप्ट एक काम करे। यदि फाइलें समान नहीं हैं, तो मैं चाहता हूं कि मेरी स्क्रिप्ट कुछ और करे। अधिक डेटा की मैन्युअल प्रविष्टि के लिए पूछने के लिए स्क्रिप्ट को रोकना नहीं चाहिए।

"समान प्रश्न" सूची में Macintosh और bash शेल स्क्रिप्ट के बारे में प्रश्न हैं। इसमें रनिंग fcया compकमांड लाइन से भी उत्तर है , जो एक वर्बोज़ आउटपुट प्रदान करते हैं। दुर्भाग्य से, fcएक परिणाम के लिए वापस नहीं करता है %errorlevel%, और comp बस बाहर निकलने के बजाय मैनुअल डेटा प्रविष्टि के लिए पूछता है।

मेरे पास विंडोज हिल शेल स्क्रिप्टिंग पर टिम हिल की किताब की एक प्रति है। पृष्ठ 216 में कोड की निम्नलिखित पंक्ति है, जहां %D1%और %D2%निर्देशिकाएं हैं, लेकिन मुझे नहीं पता कि इसे संशोधित करने के लिए सिर्फ एक ही फाइल के एक ही हिस्से पर काम करना है:

for /f "tokens=*" %%I in ('fc /b %D1%\*.* %D2%\*.* ^| find /v "Comparing" ^| find /v "FC: no*"') do (set /a ERRORS+=1) & (echo %%I)

1
क्या पॉवर्सशेल एक विकल्प है? क्योंकि अगर यह है, तो आप Get-FileHash को उपयोगी पा सकते हैं । मैंने एक बार एक स्क्रिप्ट लिखी थी जो दूसरे रास्ते से डुप्लिकेट फ़ाइलों को हटाती है; हालाँकि, कोई भी आसानी से इसे दूसरे आदेश के साथ बदल सकता है: superuser.com/questions/1219008/…
flolilo

@flolilolilo - नहीं, बाकी स्क्रिप्ट पहले से ही Windows NT शेल स्क्रिप्टिंग भाषा में है। क्या Windows NT शेल स्क्रिप्ट द्वारा पॉवरशेल स्क्रिप्ट को लपेटने का एक तुच्छ तरीका है?
जैस्पर

यदि आप मिस्टर हिल की लाइन लेते हैं %D1%\*.*और %D2%\*.*एकल फ़ाइल नामों या एकल फ़ाइल नामों का प्रतिनिधित्व करने वाले चर के साथ क्या होता है ?
जेफ जैटलिन

@JeffZeitlin - fc /b a.txt b.txt | find /v "Comparing" | find /v "FC: no*"कमांड लाइन से चलने से कोई साधारण हां / ना उत्तर नहीं मिलता है, लेकिन यह प्रदूषण को रोक देता है।
जैस्पर

जवाबों:


7

आप इस कोड का उपयोग कर सकते हैं:

fc /b file1 file2 > nul
if errorlevel 1 goto files_differ
[files are the same, do something here]

:files_differ
[files are not the same, do something here]

एक errorlevelकी 1अगर फ़ाइलों समान नहीं हैं लौटाया जाता है।

एक errorlevelका 2मतलब है कि फ़ाइलों में से एक गायब है।

> nul कमांड के आउटपुट को छिपाने के लिए उपयोग किया जाता है

वैकल्पिक रूप से, आप विंडोज के लिए बिजीबॉक्स का उपयोग कर सकते हैं और जांच सकते हैं कि फाइल हैश समान है या नहीं।


> nulकेवल स्टडआउट खाता है; यह तब भी stderr को प्रदूषित करता है जब कोई फ़ाइल गुम होती है। 1> nul 2> nulस्टडआउट और स्टेडर दोनों खाती है।
जैस्पर

@ जैस्पर वास्तव में!
rahulatschool

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