चमगादड़: कई फ़ोल्डरों में एक कमांड चलाएं


2

मेरे पास बड़ी संख्या में परियोजनाओं के साथ एक परियोजना फ़ोल्डर है। क्या कोई ऐसा तरीका है जिससे मैं एक बैट फाइल बना सकता हूं जो इन प्रोजेक्ट फोल्डर में से प्रत्येक में जाता है और कुछ कमांड चलाता है?

मैं जो करना चाहूंगा उसे स्वचालित करना चाहूंगा जो अब मैं स्वयं करूंगा

> cd dir1
> command1 arg1 arg2
> command2 arg1 arg2
> cd ..
> cd dir2
> ...

क्या यह एक बैट फ़ाइल के साथ स्वचालित करना संभव है?

जवाबों:


1

जो मैंने एक फोरम थ्रेड में पाया, उसका उपयोग करने की कोशिश की । काम करने लगता है?

pushd C:\projects
for /f "Delims=" %%i in ('dir /ad /b') do (
    cd "%%i"
    command1 arg1 arg2
    command2 arg1 arg2
    cd ..
)
popd

मुझे यकीन नहीं है कि मुझे /f "Delims=उदाहरण के लिए हिस्सा मिलेगा ... मैं कुछ निर्देशिकाओं को बाहर करना चाहूंगा। अगर आपको पता है तो कृपया कमेंट करें :)


एक मूल विधि, आपके लिए केवल निर्देशिकाओं के साथ एक फ़ाइल रखना होगा। फ़ाइल बनाने में सहायता के लिए dir / ad / b का उपयोग करें। dir / ad / b> dirlist तब फ़ाइल के प्रत्येक लाइन पर कमांड चलाने के लिए फ़ाइल नाम के साथ / f के लिए उपयोग करें। उदाहरण के लिए, यदि आपकी फ़ाइल को dirlist कहा जाता है, तो / f% f in (dirlist) do (और फिर बाकी) के लिए उपयोग करें। मैं लूप के शरीर और बहु-रेखा पहलू के लिए कोष्ठक के बारे में निश्चित नहीं हूं, लेकिन फिर भी।
बार्लॉप

1
"delims =" परिसीमन का उपयोग न करने के लिए आवश्यक है। डिफ़ॉल्ट सीमांकक अंतरिक्ष वर्ण है, इसलिए यदि किसी फ़ोल्डर में इसके नाम में कुछ जगह है, तो कुछ समस्याएं आएंगी (जैसे कि यदि एक निर्देशिका "c: \ दस्तावेज और सेटिंग \ उपयोगकर्ता" है, "delims =" के बिना, पहला परिसीमन पहले होगा) "दस्तावेज़" और बैच के बाद का स्थान इसके बजाय "c: \ documents" तक पहुंचने का प्रयास करेगा)।
कोकिबीरा

0

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

बस इस तरह एक बैट फाइल लिखें:

cd dir1
command1 arg1 arg2
command2 arg1 arg2
cd ..
cd dir2

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

for %%a IN ('dir /b %PROJECT_FOLDER%') do call second_script.bat %%a

dirयदि आपके पास फ़ाइलें और निर्देशिका हैं, तो इसके लिए सहायता की जाँच करें %PROJECT_FOLDER%। केवल निर्देशिकाओं को सूचीबद्ध करने का विकल्प होना चाहिए।


1
या गोसुब का उपयोग करें और यह सब एक स्क्रिप्ट में है।
ClioCJS

0
pushd C:\projects
:: your 'for /f' was correct, but unnecessary
for /d %%i in (*) do call :foo "%%~i"
popd
goto :eof

:foo
    if "%~1"=="junk" goto :eof
    if "%~1"=="unneeded directory" goto :eof

    pushd "%~1"
    command1
    command2
    popd
    goto :eof

वैकल्पिक रूप से, यदि आप केवल कुछ विशिष्ट निर्देशिकाओं को शामिल करना चाहते हैं:

for /d %%i in (a b c) do ...

0

यदि आप वैकल्पिक कमांड लाइनों के साथ प्रयोग करने के लिए तैयार हैं, तो जेपीएसॉफ्ट द्वारा टेककोमैंड (टीसीएमडी / टीसीसी) के बाद से ऐसा करने के लिए एक आंतरिक था, मुझे लगता है, 1980 का दशक, जब यह एनडीओएस था।

मैं सभी bak फ़ाइलों को मारने के लिए del।

वैश्विक दर्ज करें ।

वैश्विक अगर मौजूद है तो * .bak डेल * .bak

काफी तेज। प्रत्येक फ़ोल्डर के माध्यम से जाता है, और केवल यदि बेक फाइलें मौजूद हैं, तो डिलीट जारी करता है।

व्यक्तिगत प्रशासन के लिए, मैं JPSoft की बढ़ी हुई कमांड-लाइन के साथ बहुत बेहतर हूं। और मैं इसे 1980 से उपयोग कर रहा हूं - मुझे नहीं लगता कि वे कहीं जा रहे हैं।

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