Windows'ta komut satırında tırnak işareti kullanmadan boşluklardan nasıl çıkarım?


88

Örneğin, tırnak işaretleri olmadan bu komuta alternatif nedir:

CD "c:\Documents and Settings"

Tırnak işareti kullanmak istemememin nedeni, bu komutun işe yaramasıdır:

   SVN add mypathname\*.*

ama bu komut işe yaramazsa:

   SVN add "mypathname\*.*"

Sorun, içinde boşluk olan bir yol için yolumu değiştirdiğimde her şeyi alıntılamam gerekiyor. Örneğin:

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

Ancak bunu denediğimde aşağıdaki hata iletisini alıyorum:

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

2
tırnak işareti kullanmak istememenin iyi bir sebebi olduğunu söyledin.
Thomas

Neden, tırnak işareti anahtarınız bozuk mu? :)
slhck

3
@slhck Endişelenme, vardiya anahtarımı ve 2 numaralı anahtar tamamen iyi! Ben tırnak işaretleri içinde göründüğünde joker karakterlere izin vermeyen bir komut kullanıyorum!
David,

1
@MarkBooth ve @WeltenWanderer güzel denemek ama ne yazık ki bu işe yaramaz. Her 3 vakada da bir "svn: Hata çözümü ..." olur
David

1
Adın eski 8.3 biçimlendirmesini denediniz mi (DOCUME ~ 1)?
Justin Pearce,

Yanıtlar:


55

Neredeyse hepsi benim için çalışıyor, ama belki de line5 denediniz mi?

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

Veya mesela, parkenin gerçekten fark yarattığı yerin altında.

Görünüşe göre şapka simgesi sizin cevabınız olabilir, aşağıdaki 3. satıra bakınız.

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

Subversion bir programcının aracı olduğundan, SO için uygun olabilir. Burada ilgili bir soru stackoverflow.com/questions/757435/… svn 'ye almak için tırnak veya imleç kullanmak, belki de her alandan önce ters eğik çizgi kullanmak olabilir
barlop

meraklıysanız, cygwin'in svn'sini de deneyebilirsiniz .. bu sorudaki bazı cevaplarla ve bunların herhangi birinin veya çeşitlerinin sizin için çalışıp çalışmadığını görün.
barlop

5
Düzeltme simgesi doğrudan sorumu yanıtlıyor, bu yüzden cevabınızı kabul edeceğim. Maalesef SVN komutu bunu tanımıyor! Eğer denersem bu hata mesajını alıyorum "svn 'C:' çalışan bir kopya değil". Yine de onun etrafında başka bir yolum var ve bu sadece ilk önce dizine 'cd' olacak sonra SVN komutunu bir kez orada uygulayacak. İki komutu da && operatörünü kullanarak tek bir satırda bir araya getirebilirim: cd "c: \ Documents and Settings \ kullanıcı adı \ svn" && SVN add *. *
David

CD örneğinde, şapka gerekli değildir, CD'nin kaçmak için boş alana ihtiyacı yoktur
barlop

1
@ Chinggis6 ilginç .. ya DIR için de çalışmıyor. Hem copy hem de dir komutlarda bulunur .. yine de CD'dir. Her ne kadar kopya ve dir bir dosya ismi ise parametre olarak alır. Dostips forumunda sormaya değer olabilir
barlop

35

Konumun sadece bir kısmının etrafına tırnak koymayı öğrendim. Senin durumunda:

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

Bu, tırnak işaretleri kullanmasına rağmen, dikkat edilmesi gereken önemli nokta, yıldız işaretlerinin tırnak işaretleri dışında olduğu ve bu nedenle de yine de düzgün şekilde çalıştıklarıdır.


7
ayrıca eğer minimalist olmak istiyorsa, sadece alanın etrafından alıntılar ya da sadece alanı içeren karakter, örneğin: C: \> cd dökümanları "ve" notları (örneğin bu cd örneğinden kaçmak zorunda değilsiniz) spaces)
barlop

1
Çok teşekkürler. Mümkünse 4 ya da 5 kez hak kazanmış olabilirim ..
Sayka

@Sayka Soru, "Windows'ta tırnak işaretleri kullanmadan komut satırındaki boşluklardan nasıl
kaçarım

2
@barlop Elbette, ancak hiçbir tırnak işareti olmaması nedeni, yıldız işaretinin tırnak içinde olduğunda işini yapmamasıydı. Verdiğim çözüm bu sorunu önler çünkü yıldız işaretleri tırnak işaretleri dışındadır. Bu cevap, sorunun mektubuna uymuyor , ancak sorunun özüne uyuyor (yani amaçlanan amaç için çalışıyor).
Kit Johnson

26

İşe yaradığı yanılsamasını veren cevaplara rağmen, gerçek şu ki uzayda her zamanki cmd argümanlarına gizlice giremezsiniz. Bunu kanıtlamak kolaydır:

  1. " echo %1" Olarak kaydedin test.bat. Bu toplu iş dosyası, cmd'nin bizi geçtiği ilk argümanı çıkartacaktır.

  2. Şimdi, denemek ve çalıştırmak test.batdeğerini ayarlayarak, %1için foo bar. ( fooVe arasında bir boşluk karakteri olduğunu unutmayın bar.)

  3. Birkaç yıl deneme yanılma ve bunu yapmanın bir yolu olmadığını anlayın . Millet kullanarak kaçmayı önerir ^, henüz test.bat foo^ barçıkış olmaz foo bar.

Yani çıktıyı elde etmenin yolu yok ve elde edebileceğimiz foo baren yakın şey test.bat foo" "barüreten üreten foo" "barveya test.bat "foo bar"üreten çalışan "foo bar".


Şimdi, diğer cevaplar nedeni görünür işe nedeni cdyok ise kendi geçirerek zamanki argüman davranışı (her zamanki ayrılarak, ek ayrıştırma %1, %2, %3tipik toplu dosyalarında ve vb.)

Örneğin, kendine özgü komutu düşünün:

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

Neden çalışıyor Bunun nedeni cd kendisinin 7 katılmadan eşdeğer bir şey yapıyor her zamanki bir mantıksal birine argümanlar. Cmd argümanını geçen normlara göre 7 argüman görüyoruz:

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

Sanki cd7 argümana tek bir mantıksal olana katılmış array.join(" "), yoluna benzer bir şey yaparak,:

c:\documents and settings \some folder with spaces

Bu davranışın sadece (ve bazı diğer fonksiyonlara) özgücd olduğunu unutmayın . Her zamanki argüman geçişi ile ilgisi yoktur.


Aslında, cdbaşka bir özelliği var. Yukarıda çıktıyı alamadığımızı söylediğimizi hatırlıyor foo barmusunuz? Alabileceğimiz en yakın çıktı:

test.bat foo" "bar

hangi üretir foo" "bar, ya da:

test.bat "foo bar"

hangi üretir "foo bar", ya da:

test.bat "foo "bar

hangi üretir "foo "bar, ya da:

test.bat foo" bar"

hangi üretir foo" bar", ya da:

test.bat "foo b"ar

hangi üretir "foo b"ar, ya da:

test.bat fo"o bar"

hangi üretir fo"o bar", ya da:

test.bat fo"o ba"r

hangi üretir fo"o ba"r, ya da:

test.bat "fo"o" bar"

hangi üretir "fo"o" bar", ya da:

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

hangi üretir "f""o""o"" ""b""a""r", hatta:

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

hangi üretir """"f"""o""""o"" ""ba"""r"""""""""".

Yukarıdaki örneklerin tümü, karakterleri foo barkestikten sonra üretecekleri benzerliğe sahiptir ". cdYazarın da bunu farketmiş olması gerekir ... eğer aldıkları her şeyi kesen ve bu komutların hepsinin çalışmasına izin veren cdtuhaf davranışlarından çıkarsaydık :"

  • 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
Ne dağınıklık pencereleri toplu programlama ...
Klangen

Teşekkürler. Biz CD kullandığını belirlemek Can argv[]ya GetCommandLine()? pastebin.com/raw/t55iv0JS
barlop

7

Kısa dosya adı, bir esinti gibi çalışıyor gibi görünüyor.

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

Hafızayı arttırmak için ..;)


8
kısa dosya adı devre dışı bırakılmışsa çalışmayabilir
phuclv


2

8.3 değiştirme hakkında konuşanlar için, lütfen aşağıdaki iki şeye dikkat edin:

  • 8.3 NTFS'de devre dışı (veya etkin) olarak ayarlanabilir, bu nedenle her zaman olmayabilir.
  • Bir dosyanın / klasörün 8.3 adı, yalnızca aynı klasördeki diğer şeyleri oluşturarak, yeniden adlandırarak veya silerek haber verilmeksizin değiştirilebilir.

Bu yüzden c:\docume~1işaret edebilir:

  • Hiçbir yerde (geçersiz olun)
  • İstediğiniz klasör
  • Başka bir klasör
  • Zaman boyunca değişken bir klasör

Kısa adı almazsanız ve atomik işlemlerde kullanmazsanız, güvenli değildir.

Değişmeleri çok nadir olmasına rağmen, var olmamaları yaygındır.

Belirli bir klasör / dosya için 8.3 olup olmadığını bilmek istiyorsanız /X, bir dirkomuttaki parametreyle test edin veya foryalnızca bu bölümü almak için a'yı içine alın.

NTFS'de 8.3'ü etkinleştirme / devre dışı bırakma hakkında daha fazla bilgi için şu Microsoft destek makalesine bakın:
https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-file-name- oluşturma-on-ntfs-bölmeler


0

@ Pang'ın görevini ve kısa isimleri ve tuzakları tartışan diğerlerini takip ederek, uzun bir ismi kısa bir isimle dinamik olarak çözmenin yolu:

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

Sonra, açıkçası çevreleyen tırnak işaretleri yerine kısa adı kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.