2012-07-25 13 views
8

मैं एक निर्देशिका .jar फ़ाइलें से भरा है, तो जैसे उत्तरोत्तर नामित किया है:उच्चतम क्रमांकित फ़ाइल चुनें - बैच फ़ाइल

version-1.jar 
version-2.jar 
version-3.jar 

मैं उच्चतम क्रमांकित फ़ाइल का चयन करने की कोशिश कर रहा हूँ। क्या ऐसा करने का कोई आसान तरीका है? क्योंकि .\version*.jar ऐसा करने से एक त्रुटि होती है, संभवतः एकाधिक फ़ाइलों के कारण?

set max=0 

फिर फ़ाइलों पर पुनरावृति:

उत्तर

11

हम देरी विस्तार

setlocal enabledelayedexpansion 

बस अधिकतम के लिए एक चर जरूरत

for %%x in (version-*.jar) do (

हम विस्तार

बिना फ़ाइल नाम की जरूरत है
set "FN=%%~nx" 

और शुरू से version- निकालें:

set "FN=!FN:version-=!" 

अब FN बस संख्या होनी चाहिए और हम तुलना कर सकते हैं:

if !FN! GTR !max! set max=!FN! 
) 

और हम काम हो गया:

echo highest version: version-%max%.jar 

पूर्ण बैच फ़ाइल:

@echo off 
setlocal enabledelayedexpansion 
set max=0 
for %%x in (version-*.jar) do (
    set "FN=%%~nx" 
    set "FN=!FN:version-=!" 
    if !FN! GTR !max! set max=!FN! 
) 
echo highest version: version-%max%.jar 
+0

धन्यवाद, लेकिन क्या कोई आसान तरीका है? ऐसा लगता है कि थोड़ा ओवरकिल-आश – Dangercrow

+1

समस्या यह है कि संख्या एक अंक से अधिक हो सकती है और फिर कोई भद्दा सॉर्टिंग टूट जाती है। – Joey

3

जॉय के कोड से थोड़ा सा सरल संस्करण यहां दिया गया है।

@echo off 
setlocal enableDelayedExpansion 
set max=0 
for /f "tokens=1* delims=-.0" %%A in ('dir /b /a-d version-*.jar') do if %%B gtr !max! set max=%%B 
echo higest version: version-%max%.jar 

यह कोड तब भी काम करेगा जब तक कि संस्करण संख्या शून्य नहीं होती है जब तक संस्करण संख्या 0 (शून्य) नहीं होती है। टोकन के रूप में शामिल किए गए टोकन = 1 * को निर्दिष्ट करने से पहले शून्य शून्य संस्करण के बाद सभी शून्यों को संरक्षित करते समय अग्रणी शून्य को संस्करण संख्या से अलग किया जा सकता है।

एक सरल समाधान है यदि सभी संस्करण निरंतर चौड़ाई के लिए शून्य पूर्ववर्ती हैं। लेकिन यह समाधान शून्य उपसर्ग के साथ और बिना दोनों काम करता है।

यदि शून्य शून्य मौजूद हैं तो जॉय का कोड विफल हो जाएगा क्योंकि यह ऑक्टल नोटेशन इंगित करता है। अग्रणी शून्य के साथ अमान्य ऑक्टल अंकों को गलत परिणाम देने की तुलना के कारण तारों के रूप में माना जाएगा। यह शायद एक मुद्दा नहीं है क्योंकि मूल प्रश्न का तात्पर्य है कि अग्रणी शून्य मौजूद नहीं हैं। लेकिन माफ की तुलना में सुरक्षित होना बेहतर है।

+0

मैंने कुछ हद तक सवाल को सरल बना दिया है, सख्ती से संख्या 4000 से 4100 तक बोल रही है ... मैं उत्तर में समझ की आसानी की तलाश कर रहा था हालांकि xD ive कभी भी – Dangercrow

+0

से पहले देरी से पहले नहीं मिला था टोकन = 1 *, %% ए और %% बी कुछ स्पष्टीकरण के साथ कर सकता है, लेकिन आपके कोड के आधार पर मैं अपनी आवश्यकताओं के लिए लूप को अनुकूलित करने में सक्षम था, बढ़िया! मैंने यह भी पाया कि एक अंतरिक्ष को हमेशा एक डिलीमीटर के रूप में माना जाता है, भले ही स्पष्ट रूप से नहीं बताया गया हो। – parvus