मैं उद्धरण चिह्नों का उपयोग किए बिना विंडोज में कमांड लाइन में रिक्त स्थान से कैसे बच सकता हूं?


87

उदाहरण के लिए उद्धरण चिह्नों के बिना इस कमांड का विकल्प क्या है:

CD "c:\Documents and Settings"

पूर्ण कारण जो मैं उद्धरण चिह्नों का उपयोग नहीं करना चाहता, वह यह है कि यह आदेश कार्य करता है:

   SVN add mypathname\*.*

लेकिन यह आदेश काम नहीं करता है:

   SVN add "mypathname\*.*"

समस्या यह है कि जब मैं रिक्त स्थान के साथ एक पथ के लिए mypathname बदलता हूं तो मुझे पूरी बात उद्धृत करने की आवश्यकता होती है। उदाहरण के लिए:

SVN add "c:\Documents and Settings\username\svn\*.*"

लेकिन जब मैं यह कोशिश करता हूं तो मुझे निम्नलिखित त्रुटि संदेश मिलता है:

svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found

2
आपका मतलब है कि आपके पास उद्धरण चिह्नों का उपयोग करने के लिए 'नहीं' का एक अच्छा कारण है।
थॉमस

क्यों, आपकी उद्धरण चिह्न कुंजी टूट गई है? :)
slhck

3
@ स्ल्क मेरी शिफ्ट की को चिंता मत करो और नंबर २ की पूरी तरह से ठीक है! मैं एक कमांड का उपयोग कर रहा हूं जो वाइल्डकार्ड की अनुमति देने के लिए प्रकट नहीं होता है जब वे उद्धरण चिह्नों के अंदर प्रकट होते हैं!
डेविड

1
@MarkBooth और @WeltenWanderer अच्छा प्रयास करें, लेकिन दुर्भाग्य से यह काम नहीं करता है। सभी 3 मामलों में मुझे एक "svn: त्रुटि का मामला हल हो रहा है ....."
डेविड

1
क्या आपने नाम के पुराने 8.3 स्वरूपण (DOCUME ~ 1) की कोशिश की है?
जस्टिन पीयर्स

जवाबों:


54

यह मेरे लिए लगभग सभी काम करता है, लेकिन क्या आपने शायद लाइन 5 की कोशिश की है .. एक कैरेट प्रतीक (^) के साथ अंतरिक्ष से बचकर

1 C:\Documents and Settings\user>cd ..

2 C:\Documents and Settings>cd ..

3 C:\>cd Documents and Settings

4 C:\Documents and Settings>cd..

5 C:\>cd Documents^ and^ Settings

6 C:\Documents and Settings>cd..

7 C:\>cd C:\documents and settings

8 C:\Documents and Settings>cd..

9 C:\>

या नीचे उदाहरण के लिए जहां कैरेट वास्तव में सभी अंतर बनाता है।

नीचे से लगता है जैसे कैरेट प्रतीक आपका उत्तर हो सकता है, नीचे पंक्ति 3 देखें।

1 C:\>"c:\Documents and Settings\a.bat"
gaga

2 C:\>c:\Documents and Settings\a.bat
'c:\Documents' is not recognized as an internal or external command,
operable program or batch file.

3 C:\>c:\Documents^ and^ Settings\a.bat
gaga

C:\>

चूंकि तोड़फोड़ एक प्रोग्रामर का उपकरण है, इसलिए यह SO के लिए उपयुक्त हो सकता है। यहाँ एक संबंधित प्रश्न है stackoverflow.com/questions/757435/… यह आप svn को प्राप्त करने के लिए उद्धरण या कैरेट का उपयोग कर सकते हैं, तो शायद आप प्रत्येक स्थान से पहले बैकस्लैश का उपयोग करें
बार्लोप

आप साइबरविन के svn को भी आज़मा सकते हैं, यदि जिज्ञासु हैं .. तो उस प्रश्न के कुछ उदाहरणों के साथ और देखें कि उनमें से कोई भी विविधता आपके लिए काम करती है या नहीं।
बार्लोप

5
कैरट प्रतीक सीधे मेरे प्रश्न का उत्तर देता है इसलिए मैं आपके उत्तर को स्वीकार करूंगा। दुर्भाग्य से SVN कमांड इसे पहचान नहीं पाती है! अगर मैं इसे आज़माता हूँ तो मुझे यह त्रुटि संदेश मिलता है "svn 'C:' वर्किंग कॉपी नहीं है"। मेरे पास इसके चारों ओर एक और तरीका है और यह कि निर्देशिका को केवल 'cd' करना है, तो पहले SVN कमांड को एक बार वहां निष्पादित करें। मैं दोनों कमांडों को एक ही लाइन में && ऑपरेटर: cd "c: \ Documents and Settings \ username \ svn" && SVN add * * का उपयोग करके चेन को एक साथ जोड़ सकता हूं। *
David

सीडी उदाहरण में, कैरेट आवश्यक नहीं है, सीडी को अंतरिक्ष से बचने की आवश्यकता नहीं है
बार्लोप

1
@ Chinggis6 दिलचस्प .. यह DIR के लिए भी काम नहीं करता है। कॉपी और डीआईआर दोनों कमांड में बने होते हैं .. हालांकि ऐसा सीडी है। हालांकि कॉपी और डीआईआर एक फ़ाइलनाम को पैरामीटर के रूप में लेते हैं। Dostips फोरम पर पूछने के लायक हो सकता है
barlop

35

मैंने पाया कि स्थान के सिर्फ एक हिस्से के आसपास उद्धरण देना काम करता है। आपके मामले में:

SVN add C:\"Documents and Settings"\username\svn\*.*

हालांकि यह उद्धरण चिह्नों का उपयोग करता है, ध्यान देने योग्य बात यह है कि तारांकन चिह्न उद्धरण चिह्नों के बाहर हैं , इसलिए वे अभी भी सही ढंग से कार्य करते हैं।


7
अगर कोई न्यूनतर होना चाहता है, तो कोई भी केवल अंतरिक्ष के चारों ओर या केवल अंतरिक्ष वाले चार्ट जैसे उद्धरण कर सकता है, जैसे C: \> cd दस्तावेज़ "और se" ttings (हालांकि फिर से cd उदाहरण है, किसी को भी भागने की आवश्यकता नहीं है रिक्त स्थान)
बारलोप

1
बहुत बहुत धन्यवाद। यदि संभव हो तो मैंने 4 या 5 बार
उत्थान किया होगा

@ स्य्का ने सवाल पूछा कि "मैं उद्धरण चिह्नों का उपयोग किए बिना विंडोज में कमांड लाइन में रिक्त स्थान से कैसे
बचूं

2
@barlop ज़रूर, लेकिन कोई उद्धरण चिह्नों का कारण नहीं था कि तारांकन चिह्न के अंदर होने पर तारांकन अपना काम नहीं करता। मैंने जो समाधान दिया है वह इस मुद्दे से बचता है क्योंकि तारांकन उद्धरण चिह्नों के बाहर हैं। यह उत्तर प्रश्न के अक्षर का पालन ​​नहीं करता है , लेकिन यह प्रश्न की भावना का पालन ​​करता है (यानी, यह इच्छित उद्देश्य के लिए काम करता है)।
किट जॉनसन

26

इस भ्रम के जवाब देने के बावजूद कि यह काम करता है, तथ्य यह है कि आप सामान्य cmd तर्कों में रिक्त स्थान में चुपके नहीं कर सकते। यह साबित करना आसान है:

  1. सहेजें " echo %1" के रूप में test.bat। यह बैच फ़ाइल पहले तर्क का उत्पादन करेगी जो cmd हमें पास करता है।

  2. अब, कोशिश करते हैं और चलाने test.bat, के मूल्य की स्थापना %1करने के लिए foo bar। (ध्यान दें कि fooऔर बीच में एक स्पेस चार है bar।)

  3. परीक्षण और त्रुटि कुछ वर्षों के लिए और पता चलता है कि वहाँ यह करने के लिए कोई रास्ता नहीं है । फॉक्स का उपयोग करने से बचने का सुझाव देगा ^, फिर test.bat foo^ barभी आउटपुट नहीं होगा foo bar

इसलिए, आउटपुट प्राप्त करने का कोई तरीका नहीं है foo bar, और जो निकटतम हम प्राप्त कर सकते हैं वह चल रहा है test.bat foo" "barजो उत्पादन करता है foo" "bar, या test.bat "foo bar"जो उत्पादन करता है "foo bar"


अब, कारण अन्य उत्तर दिखाई काम करने के लिए कारण है cdकरता है यह स्वयं की अतिरिक्त पार्स, हमेशा की तरह तर्क गुजर के व्यवहार (सामान्य से अपसारी %1, %2, %3और ठेठ बैच फ़ाइलों में आदि)।

उदाहरण के लिए, अजीबोगरीब आदेश पर विचार करें:

cd c:\documents and settings \some folder with spaces

यह काम क्यों करता है? यह cd अपने आप में 7 सामान्य तर्कों को एक तार्किक में शामिल करने के बराबर कुछ करने के कारण है । Cmd तर्क पासिंग मानदंडों के अनुसार, हम 7 तर्क देखते हैं:

  1. c:\documents
  2. and
  3. settings
  4. \some
  5. folder
  6. with
  7. spaces

ऐसा लगता है जैसे कि cdसभी 7 तर्कों को एक तार्किक में मिला दिया गया है array.join(" "), जो कुछ ऐसा कर रहा है , जो पथ का निर्माण करता है:

c:\documents and settings \some folder with spaces

ध्यान दें कि यह व्यवहार केवल (और कुछ अन्य कार्यों) के लिए अजीब हैcd । इसका सामान्य तर्क से कोई लेना-देना नहीं है।


वास्तव में, cdएक और ख़ासियत है। याद रखें कि हमने ऊपर कहा था कि हम आउटपुट प्राप्त नहीं कर सकते हैं foo bar? निकटतम आउटपुट हम प्राप्त कर सकते हैं:

test.bat foo" "bar

जो पैदा करता है foo" "bar, या:

test.bat "foo bar"

जो पैदा करता है "foo bar", या:

test.bat "foo "bar

जो पैदा करता है "foo "bar, या:

test.bat foo" bar"

जो पैदा करता है foo" bar", या:

test.bat "foo b"ar

जो पैदा करता है "foo b"ar, या:

test.bat fo"o bar"

जो पैदा करता है fo"o bar", या:

test.bat fo"o ba"r

जो पैदा करता है fo"o ba"r, या:

test.bat "fo"o" bar"

जो पैदा करता है "fo"o" bar", या:

test.bat "f""o""o"" ""b""a""r":

जो पैदा करता है "f""o""o"" ""b""a""r", या यहां तक ​​कि:

test.bat """"f"""o""""o"" ""ba"""r"""""""""":

जो पैदा करता है """"f"""o""""o"" ""ba"""r""""""""""

उपरोक्त सभी उदाहरणों में एक समानता है, जो कि foo barहम "वर्णों को छाँटने के बाद उत्पन्न करेंगे । cdके लेखक एहसास हो जाना चाहिए यह भी ... हम से अनुमान लगाने के लिए थे cd'अजीब व्यवहार जो रों सभी को ट्रिम "यह प्राप्त करता है , इन आदेशों के सभी काम करने के लिए अनुमति देता है:

  • cd c:\documents and settings

  • cd "c:\documents and settings"

  • cd "c:"\"documents and settings"

  • cd c:\"documents" "and" "settings"

  • cd c:\"docu"ments an"d set"tings"

  • cd c:"\"docu"ments an"d set"ti"""ngs

  • cd "c"":""\"docu"ments an"d set"ti"""ngs

  • cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs

  • cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs


15
क्या एक गड़बड़ विंडोज़ बैच प्रोग्रामिंग ...
Klangen

धन्यवाद। क्या हम यह निर्धारित कर सकते हैं कि सीडी उपयोग कर रही है argv[]या GetCommandLine()? pastebin.com/raw/t55iv0JS
Barlop

7

लघु-फ़ाइलनाम हवा की तरह काम करता दिखाई देता है।

"E: \ Progra ~ 1 \ Java \ ग्रहण \ eclipse.exe" -vmargs -Xms1024m -Xmx2048m

मेमोरी बढ़ाने के लिए ..;)


8
यह काम नहीं कर सकता है यदि लघु फ़ाइल नाम अक्षम किया गया हो
phuclv


2

8.3 प्रतिस्थापन के बारे में बात करने वालों के लिए, कृपया निम्नलिखित दो बातों पर ध्यान दें:

  • 8.3 NTFS पर अक्षम (या सक्षम) पर सेट किया जा सकता है, इसलिए यह हमेशा मौजूद नहीं हो सकता है।
  • किसी फ़ाइल / फ़ोल्डर का 8.3 नाम बिना किसी सूचना के उसी फ़ोल्डर में अन्य चीजों को बनाने, नाम बदलने या हटाने से बदल सकता है।

तो c:\docume~1यह इंगित कर सकते हैं:

  • कहीं नहीं (अमान्य हो)
  • फ़ोल्डर जो आप चाहते हैं
  • एक और फ़ोल्डर
  • समय के साथ एक चर फ़ोल्डर

यह सुरक्षित नहीं है, जब तक कि आप संक्षिप्त नाम न लें और इसका उपयोग परमाणु संचालन में न करें।

हालांकि यह बहुत ही असामान्य है कि वे बदल जाते हैं, यह आम है कि वे मौजूद नहीं हैं।

यदि आप जानना चाहते हैं कि 8.3 किसी विशेष फ़ोल्डर / फ़ाइल के लिए मौजूद है, तो इसे /Xएक dirकमांड पर पैरामीटर के साथ परीक्षण करें , या इसे forकेवल उस भाग को प्राप्त करने के लिए एन्कैप्सुलेट करें , आदि।

NTFS पर 8.3 को सक्षम / अक्षम करने के बारे में अधिक जानकारी के लिए, यह Microsoft समर्थन आलेख देखें:
https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-file-name- सृजन-ऑन-NTFS-विभाजन


0

@ पैंग के पोस्ट और अन्य लोगों के संक्षिप्त नाम और नुकसान के बारे में चर्चा करने के बाद, यहाँ एक छोटे नाम के लिए एक लंबे नाम को गतिशील रूप से हल करने का तरीका दिया गया है:

for %A in ("C:\Some\long path\which must exist\to be resolved") do @echo %~sA

फिर, जाहिर है कि आप आसपास के उद्धरणों के बजाय संक्षिप्त नाम का उपयोग कर सकते हैं।

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