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
dan 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.bat
dan 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 for
dalam file BAT, Anda juga harus menggandakan %
sehingga for
perintah 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, %%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)
- 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 for
perintah masuk persen secara literal , namun perhatikan bahwa tidak seperti file BAT saat mengetik for
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.
<test>
. Ini tidak bisa dilakukan dengan menggunakan fungsi manajemen file Windows.