किसी रिश्तेदार फ़ोल्डर में फ़ाइलों पर SOX बैच चलाएँ


1

मेरे पास एक विंडोज़ बैच स्क्रिप्ट है जो विभिन्न फ़ाइलों पर SOX कमांड चलाता है, लेकिन मुझे नहीं पता कि SOX निष्पादन योग्य के सापेक्ष बैच में फ़ाइलों को चलाने के लिए बैच कैसे प्राप्त करें। वर्तमान में सभी फाइलें रूट में हैं और यह आउटपुट / संयुक्त है।

बैच स्क्रिप्ट:

cd %~dp0
mkdir combined
FOR %%A IN (*.mp3) DO sox static.mp3 %%A "combined/%%~nxA"
pause

मैं स्क्रिप्ट को निर्देशिका "ऑडियोट्रैक" में फाइलों पर sox कमांड चलाना चाहता हूं और इसे "संयुक्त" निर्देशिका में आउटपुट करता हूं। आपको एक विचार देने के लिए, यह वांछित फ़ोल्डर संरचना होगी:

/root
  sox.exe
  batch.bat
  static.mp3
     /audiotracks
       audio1.mp3
       audio2.mp3
       audio3.mp3
       audio4.mp3
     /combined
       audio1out.mp3
       audio2out.mp3
       audio3out.mp3
       audio4out.mp3

क्या यह संभव है, या ऐसा करने का एक बेहतर तरीका है? किसी भी तरह की सहायता का स्वागत किया जाएगा। आपका बहुत बहुत धन्यवाद!

जवाबों:


1

पहले diretory पर स्विच करने का प्रयास करें। सेव पाथ को बदलें। (दो लगातार डॉट्स का अर्थ है मूल फ़ोल्डर।)

cd %~dp0
mkdir combined
cd audiotracks
FOR %%A IN (*.mp3) DO sox static.mp3 %%A "../combined/%%~nxA"
cd ..
pause

काम नहीं किया। यह ऑडियोट्रैक फ़ोल्डर में sox.exe की तलाश कर रहा है। वहाँ रूट फ़ोल्डर में sox.exe को इंगित करने के लिए एक रास्ता है?
मटेयो क्यूलेर वेगा

बस sox.exe और पुस्तकालयों को audiotracks फ़ोल्डर में ले जाया गया और यह काम करता है, लेकिन मैं इसे रूट में sox के साथ कैसे काम कर सकता हूं?
मटेयो क्यूलेर वेगा

मुझे लगता है कि मेरे पास एक नया फ़ोल्डर (जैसे "/ इनपुट") के लिए "/ ऑडियोट्रैक" में निहित सभी लिपि में बैच स्क्रिप्ट हो सकती है, फिर उन्हें "संयुक्त" करने के लिए आउटपुट करें और "/ ऑडियोट्रैक" से एमपी 3 को हटा दें। मैं केवल उपयोगकर्ता के लिए एक आसान और क्लीनर "वन-क्लिक" समाधान बनाने की कोशिश कर रहा हूं।
मटेयो क्यूलेर वेगा

बस चाल कमान के साथ कोशिश की और यह अच्छी तरह से काम करता है। आपकी सहायता के लिए धन्यवाद। बहुत सराहना की!
मटेयो क्यूलेर वेगा

0

अधिकांश प्रोग्रामिंग कार्यों के साथ-साथ एक से अधिक तरीके हैं जो आप चाहते हैं। आपका वर्तमान कार्यान्वयन किसी कार्य समाधान से बहुत दूर नहीं है। असली समस्या यह है कि आप गलत कोण से समस्या के बारे में सोच रहे हैं। सापेक्ष audiotracksनिर्देशिका में फ़ाइलों को संसाधित करने की कोशिश करने के बजाय आपको परिणाम को सापेक्ष combinedनिर्देशिका में आउटपुट करने के बारे में सोचना चाहिए । यहां बताया गया है कि आपकी स्क्रिप्ट को कैसे समायोजित किया जा सकता है:

cd %~dp0
mkdir combined
cd audiotracks
FOR %%A IN (*.mp3) DO sox ..\static.mp3 "%%A" "..\combined\%%~nxA"
pause

एक वैकल्पिक, अधिक लचीला कार्यान्वयन कमांड के /fतर्क का उपयोग करने के लिए हो सकता है for। ( for /?अधिक विवरण के लिए चलाएँ ।) ऐसा करने से आप इनपुट और आउटपुट दोनों के लिए सापेक्ष पथों का उपयोग कर सकेंगे।

cd %~dp0
mkdir combined
FOR /f "tokens=*" %%A IN ('dir /b .\audiotracks\*.mp3') DO sox static.mp3 "%%A" ".\combined\%%~nxA"
pause

चलो इसे तोड़ दो:

  • /f इसका मतलब है कि एक बार में एक ही टोकन में सिंगल-कोट्स (कमांड के अंदर) में कमांड के आउटपुट को प्रोसेस करें।
  • "tokens=*"इसका मतलब है कि एक ही टोकन के रूप में आउटपुट की पूरी लाइन को पार्स करना। (मूल रूप से, इसका मतलब है कि व्हाट्सएप को सीमांकक नहीं माना जाता है।)
  • 'dir /b .\audiotracks\*.mp3' का अर्थ है बिना तिथि, आकार या अन्य मेटाडेटा के ऑडिट्रैक निर्देशिका में सभी * .mp3 फाइलें।

दुर्भाग्य से यह काम नहीं किया। यह रिटर्न: sox विफल प्रारूप: इनपुट फ़ाइल को नहीं खोल सकता `Audio1.mp3 ': ऐसी कोई फ़ाइल या निर्देशिका नहीं। मुझे लगता है कि यह रूट से फ़ाइल प्राप्त करने की कोशिश करता है।
मटेयो क्यूएलर वेगा

दूसरे समाधान ने मेरे लिए काम किया, लेकिन आपकी मदद के लिए धन्यवाद। मैं हर मदद से सीखता रहता हूँ!
मटेयो क्यूलेर वेगा

का आउटपुट क्या है dir /b .\audiotracks\*.mp3? यदि आउटपुट आपको केवल फ़ाइल नाम देता है और पूर्ण पथ नाम नहीं है, तो स्क्रिप्ट को इस तरह समायोजित करें: FOR /f "tokens=*" %%A IN ('dir /b .\audiotracks\*.mp3') DO sox static.mp3 ".\audiotracks\%%A" ".\combined\%%~nxA"
HairOfTheDog
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.