سؤال كيف أقوم بتجنب المسافات في سطر الأوامر في Windows دون استخدام علامات الاقتباس؟


على سبيل المثال ، ما هو البديل لهذا الأمر بدون علامات اقتباس:

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

74
2018-05-04 12:54


الأصل


كنت تعني أن لديك سببًا وجيهًا لعدم الرغبة في استخدام علامات اقتباس. - Thomas
لماذا ، هل مفتاح علامة اقتباسك مكسور؟ :) - slhck
slhck لا تقلق يا مفتاح التحول ومفتاح رقم 2 على ما يرام تماما! أنا أستخدم أمرًا لا يبدو أنه يسمح باستخدام أحرف البدل عند الظهور داخل علامات الاقتباس. - David
MarkBooth و @ WeltenWanderer محاولة لطيفة ولكن للأسف هذا لا يعمل. في جميع الحالات الثلاث أحصل على "svn: خطأ في حل حالة ....." - David
هل حاولت تنسيق 8.3 القديم للاسم (DOCUME ~ 1)؟ - Justin Pearce


الأجوبة:


كل شيء تقريبا يعمل بالنسبة لي ، ولكن هل حاولت ربما line5 .. الهروب من الفضاء مع رمز الإقحام (^)

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:\>

44
2018-05-04 16:59



منذ التخريب هو أداة مبرمج ، قد يكون مناسبًا لـ SO. هنا سؤال ذو صلة stackoverflow.com/questions/757435/...       يمكن استخدام علامات الاقتباس أو علامة الإقحام للحصول على svn ، ثم ربما تستخدم الخط المائل العكسي (Backslash) قبل كل مساحة - barlop
يمكنك أيضًا تجربة sjn cygwin ، إذا كنت فضوليًا .. مع بعض الأمثلة على الإجابات في هذا السؤال ومعرفة ما إذا كان هناك أي اختلافات أو تنسيقات منها تناسبك. - barlop
يجيب رمز الإقحام مباشرة على سؤالي لذا سأقبل إجابتك. للأسف لا يبدو الأمر SVN يتعرف عليه! إذا حاولت ذلك ، فإنني أتلقى رسالة الخطأ هذه "svn 'C:' ليست نسخة عمل". لدي طريقة أخرى من حوله ، وهذا ببساطة "قرص مضغوط" إلى الدليل أولاً ثم تنفيذ أمر SVN مرة واحدة هناك. يمكنني حتى تجميع الأمرين معاً في سطر واحد باستخدام عامل التشغيل &&: cd "c: \ Documents and Settings \ username \ svn" && SVN add *. * - David
في مثال القرص المضغوط ، لا يعد حرف الإقحام ضروريًا ، ولا يحتاج القرص المضغوط إلى فراغ - barlop
@ Chinggis6 مثيرة للاهتمام .. انها لا تعمل بالنسبة DIR سواء. بنيت كل من نسخة ودر في الأوامر .. على الرغم من ذلك هو CD. على الرغم من نسخ ودال تأخذ اسم الملف كمعلمة. قد يكون من الجدير طرح السؤال على منتدى dostips - barlop


لقد وجدت أن وضع علامات اقتباس حول جزء واحد فقط من الموقع يعمل. في حالتك:

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

على الرغم من أن هذا يستخدم علامات اقتباس ، فإن الشيء المهم هو ملاحظة أن العلامات النجمية هي في الخارج علامات الاقتباس ، لذلك لا تزال تعمل بشكل صحيح.


31
2018-04-24 07:45



أيضًا إذا أراد المرء أن يكون في أضيق الحدود ، يمكن للمرء إجراء اقتباسات حول المساحة فقط أو مجرد الأحرف التي تحتوي على المساحة ، على سبيل المثال ، C: \> وثائق cd "و se" ttings (على الرغم من أن هذا المثال cd ، لا يحتاج المرء إلى مساحات الهروب) - barlop
شكرا جزيلا. ربما كنت قد ربحنا 4 أو 5 مرات إن أمكن .. - Sayka
Sayka طرح السؤال "كيف أهرب من المسافات في سطر الأوامر في Windows دون استخدام علامات الاقتباس؟" - barlop
barlop بالتأكيد ، ولكن السبب في عدم وجود علامات اقتباس هو أن العلامة النجمية لا تؤدي وظيفتها عندما تكون داخل علامات الاقتباس. الحل الذي قمت بتخصيصه يتجنب هذه المشكلة لأن العلامات النجمية تقع خارج علامات الاقتباس. هذه الإجابة لا تلتزم بها رسالة السؤال ، لكنه يلتزم بها روح السؤال (أي أنه يعمل للغرض المقصود). - Kit Johnson


على الرغم من الإجابات التي تعطي الوهم أنه يعمل ، فإن الحقيقة هي أنك لا تستطيع التسلل في المساحات إلى حجج 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 معتاد الحجج في واحدة منطقية واحدة. وفقا لميثاق تمرير الحجج كمد ، نرى 7 الحجج:

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

انها كما لو cd انضمت إلى جميع الحجج السبع في واحدة منطقية واحدة ، القيام بشيء مماثل ل 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


22
2017-08-26 02:01



ما هي ويندوز دفعة البرمجة ... - Flermat
شكر. هل يمكننا تحديد ما إذا كان CD يستخدم argv[] أو GetCommandLine() ؟ pastebin.com/raw/t55iv0JS - barlop


يبدو اسم الملف القصير بمثابة نسيم.

"E: \ Progra ~ 1 \ Java \ Eclipse \ eclipse.exe" -vmargs -Xms1024m -Xmx2048m

لزيادة الذاكرة ..؛)


7
2018-04-19 07:51



قد لا تعمل إذا تم تعطيل اسم قصير - phuclv


استخدم 8.3 اسم قصير - filename. فمثلا:

If exist c:\docume~1 goto :Ifoundthesucker

3
2017-10-03 14:47



شاهد تعليق Lưu Vĩnh Phúc على الجواب Milorulez. - Gerold Broser


بالنسبة للتحدث عن استبدال 8.3 ، هل تعلم هذين الأمرين:

  • يمكن تعيين 8.3 إلى تعطيل (أو تمكين) على NTFS لذلك قد لا توجد allways
  • يمكن تغيير الاسم 8.3 للملف / المجلد دون أن يتم إفتراضه فقط من خلال إنشاء أو إعادة تسمية أو حذف أشياء أخرى على نفس المجلد

وبالتالي c:\docume~1 يمكن أن يشير إلى:

  • لا مكان (غير صالح)
  • المجلد الذي تريده
  • مجلد آخر
  • مجلد متغير على طول الوقت

إنه غير آمن ، إلا إذا حصلت على الاسم المختصر واستخدمه في العمليات الذرية.

قال إنه من غير المألوف أن يتغيروا ، لكن من الشائع جدا عدم وجودهم.

إذا كنت تريد معرفة ما إذا كان 8.3 موجودًا لملف / ملف معين ، فاختبره مع paramenter / X على أمر dir ... أو قم بتغليفه على أجل الحصول على ذلك الجزء فقط ، إلخ.

إذا كان المزيد حول كيفية تمكين / تعطيل 8.3 على NTFS ، راجع M $ على ويب:

https://support.microsoft.com/es-es/help/121007/how-to-disable-8.3-file-name-creation-on-ntfs-partitions


1
2018-05-12 08:43