Misalnya apa alternatif dari perintah ini tanpa tanda kutip:
CD "c:\Documents and Settings"
Alasan lengkap saya tidak ingin menggunakan tanda kutip adalah bahwa perintah ini TIDAK berfungsi:
SVN add mypathname\*.*
tetapi perintah ini TIDAK berfungsi:
SVN add "mypathname\*.*"
Masalahnya adalah ketika saya mengubah mypathname untuk path dengan spasi di dalamnya, saya perlu mengutip semuanya. Sebagai contoh:
SVN add "c:\Documents and Settings\username\svn\*.*"
Tetapi ketika saya mencoba ini saya mendapatkan pesan kesalahan berikut:
svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found
Jawaban:
Ini hampir semua berfungsi untuk saya, tetapi apakah Anda mungkin mencoba line5 .. keluar dari ruang dengan simbol tanda sisipan (^)
Atau misalnya di bawah ini di mana tanda sisir benar-benar membuat perbedaan.
Tampak dari bawah seperti simbol caret mungkin jawaban Anda, lihat baris 3 di bawah ini.
sumber
Saya menemukan bahwa menempatkan tanda kutip di sekitar hanya satu bagian dari lokasi berfungsi. Dalam kasus Anda:
Meskipun ini menggunakan tanda kutip, yang penting untuk diperhatikan adalah tanda bintang berada di luar tanda kutip, sehingga tanda itu masih berfungsi dengan benar.
sumber
Terlepas dari jawaban yang memberikan ilusi bahwa itu berhasil, faktanya adalah Anda tidak dapat menyelinap di ruang ke dalam argumen cmd biasa. Ini mudah dibuktikan:
Simpan "
echo %1
" sebagaitest.bat
. File batch ini akan menampilkan argumen pertama yang cmd melewati kita.Sekarang, coba dan jalankan
test.bat
, tetapkan nilai%1
untukfoo bar
. (Perhatikan bahwa ada spasi antarafoo
danbar
.)Coba-coba selama beberapa tahun dan sadari bahwa tidak ada cara untuk melakukannya . Orang-orang akan menyarankan untuk melarikan diri menggunakan
^
, namuntest.bat foo^ bar
tidak akan menghasilkanfoo bar
.Jadi, tidak ada cara untuk mendapatkan output
foo bar
, dan yang terdekat yang bisa kita dapatkan adalah menjalankantest.bat foo" "bar
yang menghasilkanfoo" "bar
, atau menjalankantest.bat "foo bar"
yang menghasilkan"foo bar"
.Sekarang, alasan jawaban yang lain muncul untuk bekerja adalah karena
cd
tidak itu sendiri parsing tambahan, menyimpang dari perilaku argumen yang biasa melewati (biasa%1
,%2
,%3
dan lain-lain dalam batch file khas).Misalnya, perhatikan perintah khusus:
Mengapa ini berhasil? Ini karena ia
cd
sendiri melakukan sesuatu yang setara dengan menggabungkan 7 argumen biasa menjadi satu argumen logis. Menurut cmd argumen yang melewati norma, kita melihat 7 argumen:c:\documents
and
settings
\some
folder
with
spaces
Seolah-olah
cd
telah menggabungkan semua 7 argumen menjadi satu yang logis, melakukan sesuatu yang miriparray.join(" ")
, yang menghasilkan jalan:Perhatikan bahwa perilaku ini khusus untuk
cd
hanya (dan beberapa fungsi lainnya). Ini tidak ada hubungannya dengan berlalunya argumen.Memang,
cd
memiliki kekhasan lain. Ingat kami menyatakan di atas bahwa kami tidak bisa mendapatkan outputfoo bar
? Output terdekat yang bisa kita dapatkan adalah dengan menjalankan:yang menghasilkan
foo" "bar
, atau:yang menghasilkan
"foo bar"
, atau:yang menghasilkan
"foo "bar
, atau:yang menghasilkan
foo" bar"
, atau:yang menghasilkan
"foo b"ar
, atau:yang menghasilkan
fo"o bar"
, atau:yang menghasilkan
fo"o ba"r
, atau:yang menghasilkan
"fo"o" bar"
, atau:yang menghasilkan
"f""o""o"" ""b""a""r"
, atau bahkan:yang menghasilkan
""""f"""o""""o"" ""ba"""r""""""""""
.Semua contoh di atas memiliki satu kesamaan, yang akan mereka hasilkan
foo bar
setelah kita memotong"
karakter.cd
Penulis pasti menyadari hal ini juga ... jika kita menyimpulkan daricd
perilaku aneh yang memotong semua"
yang diterimanya , memungkinkan semua perintah ini bekerja: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
sumber
argv[]
atauGetCommandLine()
? pastebin.com/raw/t55iv0JSNama-nama pendek tampak bekerja seperti angin.
"E: \ Progra ~ 1 \ Java \ Eclipse \ eclipse.exe" -vmargs -Xms1024m -Xmx2048m
Untuk meningkatkan memori ..;)
sumber
Gunakan nama file 8.3 pendek. Sebagai contoh:
sumber
Bagi mereka yang berbicara tentang penggantian 8.3, harap perhatikan dua hal berikut:
Jadi
c:\docume~1
bisa menunjuk ke:Itu tidak aman, kecuali Anda mendapatkan nama pendek dan menggunakannya dalam operasi atom.
Meskipun sangat jarang mereka berubah, adalah umum bahwa mereka tidak ada.
Jika Anda ingin tahu apakah 8.3 ada untuk folder / file tertentu, uji dengan parameter
/X
padadir
perintah, atau enkapsulasi padafor
hanya untuk mendapatkan bagian itu, dll.Untuk selengkapnya tentang cara mengaktifkan / menonaktifkan 8.3 pada NTFS, lihat artikel dukungan Microsoft ini:
https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-file-name- partisi-penciptaan-ntfs
sumber
Menindaklanjuti pos @ Pang, dan yang lainnya membahas nama pendek dan jebakan, inilah cara untuk secara dinamis menyelesaikan nama panjang menjadi nama pendek:
Kemudian, jelas Anda bisa menggunakan nama pendek daripada tanda kutip di sekitarnya.
sumber