Windows .cmd फ़ाइल या बैच फ़ाइल में पथ के रिक्त स्थान के साथ पथ चर सेट करें


112

मैं स्क्रिप्ट लेखन के लिए नया हूं और यह काम करने के लिए नहीं मिल सकता। अगर मैं इसमें एक जगह के बिना फ़ाइलों को एक पथ पर स्थानांतरित कर सकता था, लेकिन मैं इसे अंतरिक्ष के साथ काम करना चाहूंगा अगर यह हो सकता है।

मैं एक .cmd फ़ाइल वाले फ़ोल्डर में Office अद्यतनों का एक गुच्छा निकालना चाहता हूं। बैच फ़ाइल को किसी भी कंप्यूटर पर प्रयोग करने योग्य बनाने के लिए, मैंने एक पथ चर निर्धारित किया है जिसे मुझे केवल एक मशीन में दूसरी मशीन पर चलाने के लिए बदलना होगा। समस्या यह है कि पथ में एक जगह है। अगर मैं परिभाषा में पथ के चारों ओर उद्धरण डालता हूं, तो cmd.exe उन्हें फ़ाइल नाम और स्विच को जोड़ने से पहले पथ के चारों ओर रखता है और बैच "कमांड लाइन सिंटैक्स त्रुटि" के साथ विफल हो जाता है। उद्धरण के बिना, यह "आंतरिक या बाहरी कमांड, ऑपरेशनल प्रोग्राम, या बैच फ़ाइल के रूप में मान्यता प्राप्त नहीं है।"

परीक्षण के लिए, मैं तब तक हेल्प स्विच का उपयोग कर रहा हूं जब तक कि मैं इसे काम कर सकता हूं। मैं इसे 8.3 फ़ाइल / फ़ोल्डर नाम (उदाहरण के लिए MyDocu ~ 1 के रूप में मेरे दस्तावेज़) का उपयोग करके कर सकता हूं, लेकिन क्या इसे अलग तरीके से किया जा सकता है?


उद्धरण में फ़ाइल नाम के साथ पथ होना चाहिए और कमांड लाइन मापदंडों का पालन करना चाहिए। क्या आप इस बारे में कुछ और जानकारी दे सकते हैं कि कमांड लाइन कैसे बनती है? वास्तव में वाह क्या आपका मतलब है> अगर मैं परिभाषा में पथ के चारों ओर उद्धरण लगाता हूं, तो cmd.exe उन्हें रास्ते में चारों ओर रखता है इससे पहले कि वह फ़ाइल नाम और स्विच को जोड़ दे
vladhorby

जवाबों:


104

कुछ इस तरह की कोशिश करो:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2

यही मैंने नोटपैड में रिप्लेस का उपयोग करके किया है। धन्यवाद।
मार्सिकसन

5
खुशी है कि यह मदद की। अच्छा होगा यदि आप उत्थान करें और जो भी उत्तर आपको लगता है कि आपकी मदद करता है उसे स्वीकार करें।
एफोरिया

75

मैं उपयोग करता हूं

set "VAR_NAME=<String With Spaces>"

पथ को अद्यतन करते समय:

set "PATH=%UTIL_DIR%;%PATH%"

3
यह स्वीकृत उत्तर होना चाहिए। किसी कारण से, अगर एक ब्लॉक से सेट कॉलिंग काम नहीं करती है, तो मान में एक स्थान होता है और वह अनक्वॉटेड है।
केविन

33

यहां दो विकल्प हैं। सबसे पहले, आप रास्ते को अनारक्षित स्टोर कर सकते हैं और बाद में इसे उद्धृत कर सकते हैं:

set MyPath=C:\Program Files\Foo
"%MyPath%\foo with spaces.exe" something

एक अन्य विकल्प जो आप उपयोग कर सकते हैं, वह एक सबरूटीन है जो संयुक्त राष्ट्र के उद्धृत स्ट्रिंग के लिए सहयोगी है (लेकिन इस मामले में यह वास्तव में बहुत अच्छा विचार नहीं है क्योंकि आप उद्धरण जोड़ रहे हैं, उन्हें दूर कर रहे हैं और बिना लाभ के फिर से जोड़ रहे हैं)

set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof

:foo
"%~1\foo.exe"
goto :eof

%~1तर्क-पीछे उद्धरण चिन्हों को हटा। यह तब काम आता है जब उद्धृत किए गए फ़ोल्डर नामों को पास किया जाता है, लेकिन जैसा कि पहले कहा गया था, इस विशेष मामले में यह सबसे अच्छा विचार नहीं है :-)


मैंने नोटपैड में रिप्लेसमेंट का उपयोग करते हुए पहली विधि का उपयोग किया। दूसरा अनावश्यक रूप से जटिल लग रहा था। धन्यवाद।
21

2
मेरे पास एक बैच फ़ाइल है जिसे पैरामीटर मिलते हैं। उपयोग करना set LALA=%~1मेरे लिए क्या काम कर रहा था।
JCH2k

जब आप सबरूटीन्स
robe007

16

इसे इस्तेमाल करे;

  1. नीचे एक चर बनाएं

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. फिर चर के साथ पथ को बदलें। प्रारंभ और समाप्ति के लिए उद्धरण जोड़ना सुनिश्चित करें

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    

8

जब मैं एक .bat फ़ाइल बना रहा होता हूं, तो मैं हमेशा दोहरे उद्धरणों में पथ रखता हूं। (मैंने अभी PAUSE को जोड़ा है इसलिए यह स्क्रीन को बंद नहीं करेगा।)

उदाहरण के लिए:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE

7

ऐसा करने का उचित तरीका इस प्रकार है:

@ECHO off
SET MY_PATH=M:\Dir\^
With Spaces\Sub Folder^
\Dir\Folder
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat
CALL "%MY_PATH%\hello.bat"
pause

5

इस समस्या को ठीक करने का सबसे आसान तरीका उद्धरण में फ़ोल्डर का नाम रखना है:

(cd\New Folder\...) --> (cd\"New Folder"\...)

आशा है कि यह मदद करता है।


2

यदि आपको स्थायी पथ संग्रहीत करने की आवश्यकता है (cmd पुनरारंभ होने पर पथ नहीं बदला गया है)

  1. कमांड प्रॉम्प्ट को व्यवस्थापक के रूप में चलाएं (cmd.exe पर राइट क्लिक करें और व्यवस्थापक के रूप में रन का चयन करें)

  2. Cmd में setx path "%path%;your new path" तब दर्ज करें

  3. जाँचें कि क्या पथ सही तरीके से टाइप करके और एंटर दबाकर लिया गया है


1
मुझे लगता है, प्रश्न पैथ चर के बारे में नहीं है , बल्कि एक पथ चर के बारे में है । ओपी स्पष्ट रूप से एक विशेष पथ को एक चर में संग्रहित करना चाहता है और बैच स्क्रिप्ट में मूल्य का उपयोग करता है।
एंड्री एम

1

यह भी सिर्फ इस तरह से मेरे लिए काम करता है डबल स्लैश जोड़ने की कोशिश करो

सेट dir = "C: \\ 1। कुछ फ़ोल्डर \\ कुछ अन्य फ़ोल्डर \\ सिर्फ इसलिए"

@ एमकेडीआईआर पर% dir%

OMG पोस्ट करने के बाद उन्होंने मेरे पोस्ट में दूसरा \ _ हटा दिया ताकि अगर आप मेरी टिप्पणी खोलें और यह तीन को दिखाता है तो आपको उन्हें दो के रूप में पढ़ना चाहिए ......

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