Catatan: tidak semua karakter yang dipesan berlaku untuk sistem file NTFS. Menggunakan Linux, misalnya, saya dapat dengan mudah membuat file bernama <test>. Ini tidak bisa dilakukan dengan menggunakan fungsi manajemen file Windows.
Nathan Osman
2
@NathanOsman Anda mungkin dapat membuat file dengan nama-nama itu dari dalam Windows menggunakan notasi path absolut mentah ( \\?\C:\USERS\DEFAULT\<test>).
zwol
@ zwol oh? Saya tidak tahu itu. Senang mendengarnya.
Nathan Osman
@ zwol Bukan dari cmdshell ... F:\test>md \\?\f:\test\<test> Sintaks perintahnya salah.
Jawaban DavidPostill sangat bagus, tetapi mungkin sedikit membingungkan pendatang baru. Saya akan coba ulangi.
%bukan karakter yang dilindungi undang - undang .
Ini adalah karakter dengan arti khusus untuk shell command (alias cmd.exedan command.com)
Perbedaannya adalah:
Anda tidak dapat menggunakan karakter yang dipesan sama sekali (tetapi lihat di bawah)
Anda mungkin dapat menggunakan karakter khusus dan melarikan diri - hanya dengan tidak mengetiknya apa adanya
Dengan kata lain, Anda dapat membuat file atau folder yang berisi %namanya. Anda dapat melakukannya secara langsung menggunakan windows explorer karena %tidak memiliki makna khusus di sana. Tidak ada niat untuk mencegah Anda membuat file seperti itu di command prompt juga, tetapi karena %memiliki makna khusus di sana, Anda perlu menggunakan sintaks yang diuraikan di bawah ini untuk membuat file seperti itu.
BAT-file
Jika Anda menulis file batch (* .bat, * .cmd), yang dieksekusi oleh shell perintah (alias aplikasi prompt perintah), untuk menggunakan %secara harfiah (seperti untuk membuat file dengan %nama, dan bukan untuk menggantikan variabel atau parameter) Anda harus mengetik %%.
Namun, perintah echo %%windir%%menghasilkan keluaran:%windir%
dan seterusnya: perintah echo %%%%windir%%%%menghasilkan output:%%windir%%
Jadi jika Anda menyimpan baris berikut sebagai test.batdan menjalankannya, itu akan membuat direktori bernama %test%lengkap dengan tanda persen:
md %%test%%
Jika tidak ada variabel bernama test, perintah berikut ini setara dengan yang terakhir - itu juga membuat direktori %test%:
md %test%
... tapi tolong jangan pernah melakukannya seperti itu karena perintah Anda tidak akan berperilaku seperti yang Anda inginkan begitu seseorang membuat variabel dengan nama itu
Jika Anda berniat untuk menggunakan perintah fordalam file BAT, Anda juga harus menggandakan %sehingga forperintah itu memiliki arti khusus untuk alih-alih untuk shell perintah itu sendiri:
for %%i in (*.*) do echo %%i
Ini akan menghasilkan daftar file dalam direktori saat ini (yaitu, %%imemiliki arti khusus), dan saya tidak yakin bagaimana membuatnya menghasilkan literal %%itanpa menggunakan %p%solusi yang dijelaskan di bagian selanjutnya ( %%%%itidak berfungsi di sini).
%bukan satu-satunya karakter dengan makna khusus pada command prompt. Lainnya termasuk ^, <, >, |, (, ), &, !, ". Sebagian besar dari mereka (tidak termasuk ") dapat melarikan diri - yaitu, diawali dengan karakter pelolosan ^sehingga karakter literal dimasukkan, menekan makna khusus. Mereka juga kehilangan fungsi khusus mereka dalam string doublequoted, dan "yang lolos dengan garis miring terbalik: \". Beberapa caret ( ^) mungkin perlu digandakan di dalam string doublequote-tertutup dan di mana terjadi substitusi variabel tertunda ( !arti khusus).
Command prompt
Sayangnya, ketika mengetik perintah ke jendela command prompt secara langsung, menggandakan %karakter hanya menghasilkan %%yaitu pendekatan di atas tidak berfungsi dalam kasus itu.
Tampaknya ada solusi memanfaatkan kekhasan dalam pemrosesan perintah - Anda bisa mendapatkan literal %dengan mengetik ^setelahnya %. Pendekatan itu bukan sangat mudah: jika nama file Anda dilampirkan dalam tanda kutip ganda, ^diartikan secara harfiah (dan tidak dihapus seperti tanpa tanda kutip)
perintah echo "%^windir%"menghasilkan output: "%^windir%"(dengan tambahan ^- bukan apa yang kita inginkan)
Saya merekomendasikan solusi lain sebagai gantinya:
buat variabel seperti ini: set "p=%"
gunakan %p%dimanapun Anda membutuhkan tanda persen literal: echo "%p%windir%p%"sekarang akan menghasilkan keluaran:"%windir%"
Solusi yang sama dapat digunakan untuk mendapatkan forperintah masuk persen secara literal , namun perhatikan bahwa tidak seperti file BAT saat mengetik forperintah secara langsung, Anda tidak menggandakan tanda persen.
Karakter sistem file yang dilindungi undang-undang
Anda biasanya tidak dapat membuat file atau direktori yang berisi karakter-karakter khusus berikut dalam namanya /?<>\:*|":, NULL-simbol dan karakter dengan kode 1 hingga 31; juga .dan spasi tidak bisa menjadi karakter terakhir; dan nama berikut adalah ilegal: com1com2com3com4com5com6com7com8com9lpt1lpt2lpt3lpt4lpt5lpt6lpt7lpt8lpt9connulprn.
Namun, beberapa dari pembatasan ini dapat dilewati awalan path file dengan \\?\seperti ini: \\?\c:\test...\nul. Setidaknya file dengan nama yang dicadangkan dan yang diakhiri dengan spasi dan titik dapat dimanipulasi seperti itu.
Terlebih lagi, sistem file NTFS sendiri mendukung beberapa subsistem penamaan: DOS, Windows dan POSIX. Ini adalah subsistem Windows yang memiliki semua batasan di atas, sementara POSIX hanya melarang /dan simbol NULL.
GNU / Linux OS (superset dari POSIX) dengan demikian dapat membuat (dan menghapus) nama-nama file / direktori yang fungsi windows API paling normal (dan karenanya program windows) tidak dapat bekerja dengan. Pada Windows XP bekerja dengan mereka dimungkinkan dengan menginstal "Layanan Untuk Unix subsistem" (SFU) gratis; pada Vista dan di atas alat pihak ketiga diperlukan untuk itu. Saya tidak yakin apakah subsistem ubuntu-on-windows10 baru dapat melakukannya.
Mengapa Anda menggunakan tag keyboard untuk nama jalur / perintah? Secara sintaksis akan lebih benar dan lebih mudah dibaca jika Anda hanya menggunakan pemformatan kode inline. Ini juga akan lebih mudah untuk mengetik: backtick daripada <kbd>.
Cody Grey
selesai Saya pikir tag <kbd> </kbd> memiliki garis besar yang lebih jelas daripada code blocks. Tetapi jika pertanyaan seperti itu muncul, saya kira mereka memang menyebabkan kebingungan.
Jack White
2
"Ini adalah simbol pelarian dari shell perintah" Tidak benar. Karakter melarikan diri dalam cmd adalah ^. %adalah "karakter yang memiliki arti khusus untuk parameter baris perintah dan parameter UNTUK. Untuk memperlakukan persen sebagai karakter biasa, gandakan saja".
DavidPostill
Memang, persyaratan saya campur aduk. Sekarang dikoreksi jawabannya. Terima kasih.
Jack White
Juga menyenangkan catatan, seperti diuraikan dalam jawaban saya, Anda hanya ganda %di forjika itu foradalah di dalam file batch. Mengetik for %%i in (*) do echo %%ike jendela perintah propmt menghasilkan kesalahan mengutip penampilan yang tidak tepat %%i.
<test>
. Ini tidak bisa dilakukan dengan menggunakan fungsi manajemen file Windows.\\?\C:\USERS\DEFAULT\<test>
).cmd
shell ...F:\test>md \\?\f:\test\<test>
Sintaks perintahnya salah.md \\^?\f:\test\^<test^>
?Jawaban DavidPostill sangat bagus, tetapi mungkin sedikit membingungkan pendatang baru. Saya akan coba ulangi.
%
bukan karakter yang dilindungi undang - undang .Ini adalah karakter dengan arti khusus untuk shell command (alias
cmd.exe
dancommand.com
)Perbedaannya adalah:
Dengan kata lain, Anda dapat membuat file atau folder yang berisi
%
namanya. Anda dapat melakukannya secara langsung menggunakan windows explorer karena%
tidak memiliki makna khusus di sana. Tidak ada niat untuk mencegah Anda membuat file seperti itu di command prompt juga, tetapi karena%
memiliki makna khusus di sana, Anda perlu menggunakan sintaks yang diuraikan di bawah ini untuk membuat file seperti itu.BAT-file
Jika Anda menulis file batch (* .bat, * .cmd), yang dieksekusi oleh shell perintah (alias aplikasi prompt perintah), untuk menggunakan
%
secara harfiah (seperti untuk membuat file dengan%
nama, dan bukan untuk menggantikan variabel atau parameter) Anda harus mengetik%%
.Sebagai contoh,
echo %windir%
menghasilkan output:c:\windows
echo %%windir%%
menghasilkan keluaran:%windir%
echo %%%%windir%%%%
menghasilkan output:%%windir%%
Jadi jika Anda menyimpan baris berikut sebagai
test.bat
dan menjalankannya, itu akan membuat direktori bernama%test%
lengkap dengan tanda persen:Jika tidak ada variabel bernama
test
, perintah berikut ini setara dengan yang terakhir - itu juga membuat direktori%test%
:... tapi tolong jangan pernah melakukannya seperti itu karena perintah Anda tidak akan berperilaku seperti yang Anda inginkan begitu seseorang membuat variabel dengan nama itu
Jika Anda berniat untuk menggunakan perintah
for
dalam file BAT, Anda juga harus menggandakan%
sehinggafor
perintah itu memiliki arti khusus untuk alih-alih untuk shell perintah itu sendiri:Ini akan menghasilkan daftar file dalam direktori saat ini (yaitu,
%%i
memiliki arti khusus), dan saya tidak yakin bagaimana membuatnya menghasilkan literal%%i
tanpa menggunakan%p%
solusi yang dijelaskan di bagian selanjutnya (%%%%i
tidak berfungsi di sini).%
bukan satu-satunya karakter dengan makna khusus pada command prompt. Lainnya termasuk^
,<
,>
,|
,(
,)
,&
,!
,"
. Sebagian besar dari mereka (tidak termasuk"
) dapat melarikan diri - yaitu, diawali dengan karakter pelolosan^
sehingga karakter literal dimasukkan, menekan makna khusus. Mereka juga kehilangan fungsi khusus mereka dalam string doublequoted, dan"
yang lolos dengan garis miring terbalik:\"
. Beberapa caret (^
) mungkin perlu digandakan di dalam string doublequote-tertutup dan di mana terjadi substitusi variabel tertunda (!
arti khusus).Command prompt
Sayangnya, ketika mengetik perintah ke jendela command prompt secara langsung, menggandakan
%
karakter hanya menghasilkan%%
yaitu pendekatan di atas tidak berfungsi dalam kasus itu.Tampaknya ada solusi memanfaatkan kekhasan dalam pemrosesan perintah - Anda bisa mendapatkan literal
%
dengan mengetik^
setelahnya%
. Pendekatan itu bukan sangat mudah: jika nama file Anda dilampirkan dalam tanda kutip ganda,^
diartikan secara harfiah (dan tidak dihapus seperti tanpa tanda kutip)echo %windir%
menghasilkan output:c:\windows
echo %^windir%
menghasilkan output:%windir%
echo "%^windir%"
menghasilkan output:"%^windir%"
(dengan tambahan^
- bukan apa yang kita inginkan)Saya merekomendasikan solusi lain sebagai gantinya:
set "p=%"
%p%
dimanapun Anda membutuhkan tanda persen literal:echo "%p%windir%p%"
sekarang akan menghasilkan keluaran:"%windir%"
Solusi yang sama dapat digunakan untuk mendapatkan
for
perintah masuk persen secara literal , namun perhatikan bahwa tidak seperti file BAT saat mengetikfor
perintah secara langsung, Anda tidak menggandakan tanda persen.Karakter sistem file yang dilindungi undang-undang
Anda biasanya tidak dapat membuat file atau direktori yang berisi karakter-karakter khusus berikut dalam namanya
/
?
<
>
\
:
*
|
"
:, NULL-simbol dan karakter dengan kode 1 hingga 31; juga.
dan spasi tidak bisa menjadi karakter terakhir; dan nama berikut adalah ilegal:com1
com2
com3
com4
com5
com6
com7
com8
com9
lpt1
lpt2
lpt3
lpt4
lpt5
lpt6
lpt7
lpt8
lpt9
con
nul
prn
.Namun, beberapa dari pembatasan ini dapat dilewati awalan path file dengan
\\?\
seperti ini:\\?\c:\test...\nul
. Setidaknya file dengan nama yang dicadangkan dan yang diakhiri dengan spasi dan titik dapat dimanipulasi seperti itu.Terlebih lagi, sistem file NTFS sendiri mendukung beberapa subsistem penamaan: DOS, Windows dan POSIX. Ini adalah subsistem Windows yang memiliki semua batasan di atas, sementara POSIX hanya melarang
/
dan simbol NULL.GNU / Linux OS (superset dari POSIX) dengan demikian dapat membuat (dan menghapus) nama-nama file / direktori yang fungsi windows API paling normal (dan karenanya program windows) tidak dapat bekerja dengan. Pada Windows XP bekerja dengan mereka dimungkinkan dengan menginstal "Layanan Untuk Unix subsistem" (SFU) gratis; pada Vista dan di atas alat pihak ketiga diperlukan untuk itu. Saya tidak yakin apakah subsistem ubuntu-on-windows10 baru dapat melakukannya.
sumber
<kbd>
.code blocks
. Tetapi jika pertanyaan seperti itu muncul, saya kira mereka memang menyebabkan kebingungan.^
.%
adalah "karakter yang memiliki arti khusus untuk parameter baris perintah dan parameter UNTUK. Untuk memperlakukan persen sebagai karakter biasa, gandakan saja".%
difor
jika itufor
adalah di dalam file batch. Mengetikfor %%i in (*) do echo %%i
ke jendela perintah propmt menghasilkan kesalahan mengutip penampilan yang tidak tepat%%i
.