फ़ाइल नाम के अनुसार ज़िपिंग फ़ाइलें


0

दैनिक हमें इस तरह से पांच फाइलें मिलती हैं:

vi_250000364846.dqa_report.xlsx
vi_250000364846.3553_report
vi_250000364846.MSR_report
vi_250000364857.3553_report
vi_250000364857.dqa_report.xlsx

फ़ाइल नाम की संख्या प्रत्येक दिन अलग-अलग होती है, लेकिन वे तीन आवश्यक फ़ाइलों के लिए समान होंगी। मुझे उन तीन फ़ाइलों को केवल एक संपीड़ित ज़िप फ़ोल्डर में भेजने की आवश्यकता है।

मैंने निम्नलिखित कोड लिखा है, लेकिन यह पहली बार कई बार फाइल का उपयोग कर रहा है और पांच बार समान मूल्य प्रदर्शित करता है:

@echo on  
set LOGFILE=batch.log  
call :LOG > %LOGFILE%  
exit /B  

:LOG  
setlocal EnableDelayedExpansion  
set n=0  
set count=0  
set vector[%n%]=0  
for /f "tokens=* delims=." %%i in ('dir /b /a-d "C:\Test"') do (  
set filename=%%i  
for /f "tokens=2 delims=_." %%a in ("%filename%") do (  
   set vector[!n!]=%%a  
  for /f "tokens=* delims==" %%v in ('set vector[%n%]')  do @echo %%v  
)  
 set /A n+=1  
)

मुझे यकीन नहीं है कि यह दूसरी फ़ाइल को पैरामीटर के रूप में क्यों नहीं ले रहा है। मैं सभी पाँच फ़ाइलनामों में संख्याओं की एक सरणी बनाने की कोशिश कर रहा हूं और फिर उन सरणी मूल्यों की तुलना करता हूं।

कृपया यह पता लगाने में मेरी मदद करें कि यह कहाँ गलत है।


न तो आपके कोड से और न ही विवरण से यह स्पष्ट है कि आप कौन सी 3 फाइलें जिप करना चाहते हैं। पहला for /fअनावश्यक लगता है क्योंकि आप इसका उपयोग केवल फाइलों को एन्यूमरेट करने के लिए करते हैं और तीसरे को गलत स्थान पर रखा जाता है; यह ओ / के लिए ओटर के बाहर होना चाहिए।
लोटपिंग्स

जवाबों:


0

आपको कुछ ऐसे स्थान मिले हैं जहाँ आपने उत्सुक विस्तार ( %सीमांकक के साथ ) का उपयोग किया है जहाँ आपको विलंबित विस्तार ( !सीमांकक के साथ ) का उपयोग करना चाहिए था । फिक्सिंग जो आप चाहते हैं व्यवहार प्राप्त करने के लिए लगता है:

@echo on  
set LOGFILE=batch.log  
call :LOG > %LOGFILE%  
exit /B  

:LOG  
setlocal EnableDelayedExpansion  
set n=0  
set count=0  
set vector[%n%]=0  
for /f "tokens=* delims=." %%i in ('dir /b /a-d "C:\Test"') do (  
set filename=%%i  
for /f "tokens=2 delims=_." %%a in ("!filename!") do (  
   set vector[!n!]=%%a  
  for /f "tokens=* delims==" %%v in ('set vector[!n!]')  do @echo %%v  
)  
 set /A n+=1  
)

स्पष्ट होने के लिए, मेरे द्वारा किए गए परिवर्तन निम्न हैं:

for /f "tokens=2 delims=_." %%a in ("%filename%") do (  

में परिवर्तित किया गया:

for /f "tokens=2 delims=_." %%a in ("!filename!") do (  

तथा:

for /f "tokens=* delims==" %%v in ('set vector[%n%]')  do @echo %%v  

में परिवर्तित किया गया:

for /f "tokens=* delims==" %%v in ('set vector[!n!]')  do @echo %%v  

उन परिवर्तनों के बिना, %filename%हमेशा खाली स्ट्रिंग में %n%विस्तार हो रहा है , और हमेशा 0 तक विस्तारित हो रहा है (बाहरी forशुरू होने पर इसका मूल्य निर्धारित किया गया था ); बाद के मामले में, यह केवल आपके आउटपुट को खराब कर देता है (आप !n!असाइन करते समय सही तरीके से उपयोग किया जाता है vector, इसलिए इसमें सही मान थे, यह सिर्फ इतना है कि आपने केवल पहली प्रविष्टि तब भी मुद्रित की थी जब आपने बाद के सूचकांकों में प्रविष्टियां जोड़ी थीं)।

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