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 %%.
Sebagai contoh,
- perintah
echo %windir%menghasilkan output:c:\windows
- 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:c:\windows
- perintah
echo %^windir%menghasilkan output:%windir%
- 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: 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.
<test>. Ini tidak bisa dilakukan dengan menggunakan fungsi manajemen file Windows.