Відповідь Давида Постілла велика, але може трохи заплутати новоприбулих. Я спробую перефразовувати.
% не є зарезервований характер.
Це символ з особливе значення до командна оболонка (ака cmd.exe і command.com )
Різниця:
- взагалі не можна використовувати зарезервовані символи (але див. нижче)
- можливо, ви зможете використовувати спеціальні символи та символи виходу - просто не вводячи їх як є
Іншими словами, можна створити файл або папку, що містить % від їх імені. Ви можете зробити це безпосередньо за допомогою Windows Explorer, тому що % тут немає особливого значення. Не було жодного наміру перешкодити вам створювати такі файли в командному рядку, але тому % має особливе значення там, вам потрібно використовувати синтаксис, описаний нижче, щоб створити такі файли.
BAT-файли
Якщо ви написання пакетного файлу (* .bat, * .cmd), які виконуються командними оболонками (наприклад, командний рядок), щоб використовувати % буквально (наприклад, для створення файлу з % в назві, а не замінювати змінну або параметр) потрібно ввести %% замість цього.
Наприклад,
- команду
echo %windir% виробляє вивід: c:\windows
- однак, командуйте
echo %%windir%% виробляє вивід: %windir%
- і так далі: команда
echo %%%%windir%%%% виробляє вивід: %%windir%%
Так що якщо ви збережете наступний рядок як test.bat і запустити його, він створить каталог з ім'ям %test% укомплектовано знаками відсотка:
md %%test%%
Якщо є ні змінна імені test, ця наступна команда еквівалентна останньої - вона також створює каталог %test%:
md %test%
... але, будь ласка, ніколи не роби це так, оскільки ваша команда не буде вести себе так, як ви хотіли, як тільки хтось створить змінну з таким ім'ям
Якщо ви маєте намір використовувати команду for у BAT-файлі також потрібно подвоїти % для того, щоб він мав особливе значення for замість команди оболонки команди:
for %%i in (*.*) do echo %%i
Це створить список файлів у поточному каталозі (тобто %%i має особливе значення), і я не впевнений, як зробити це буквальним %%i не звертаючись до %p% обхідний шлях, описаний у наступному розділі ( %%%%i тут не працює).
% не є єдиним символом зі спеціальним значенням у командному рядку. Інші включають ^, <, >, |, (, ), &, !, ". Більшість з них (за винятком " ) може бути втік - тобто, з префіксом символу втечі ^ так що вставляється буквальний символ, пригнічуючи його особливе значення. Вони також втрачають свою особливу функцію всередині подвійногокотированого рядка, і " відображається зі зворотною слеш: \". Деякі кари ( ^ ), може знадобитися подвоїти всередині рядка з подвійним цитатою, а там, де відбувається заміщення змінної змінної ! особливе значення).
Командний рядок
На жаль, при наборі команд у вікно командного рядка безпосередньо, подвоєння % характер просто виробляє %% вищезгаданий підхід не працює в цьому випадку.
Схоже, існує обхідний шлях, який використовує приховування в обробці команд - ви можете отримати літерал % набравши ^ після %. Такий підхід не є надійним: якщо ваше ім'я файлу укладено у подвійні лапки, ^ інтерпретується буквально (і не видаляється як без лапок)
- команду
echo %windir% виробляє вивід: c:\windows
- команду
echo %^windir% виробляє вивід: %windir%
- команду
echo "%^windir%" виробляє вивід: "%^windir%" (за додаткову плату ^ - не те, що ми хотіли)
Замість цього рекомендую інший обхідний шлях:
- створити змінну таким чином:
set "p=%"
- використання
%p% у будь-якому місці, де потрібний буквальний знак відсотка: echo "%p%windir%p%" тепер буде виробляти вихідні дані: "%windir%"
Таке ж обхідне рішення може бути використано для отримання ліцензійного відсотка входу for Команда, проте зауважимо, що на відміну від BAT-файлів при введенні for команду безпосередньо ні подвійні знаки відсотка.
Файлова система зарезервована символами
Зазвичай не можна створити файл або каталог з наступними зарезервованими символами в його назві: / ? < > \ : * | ", Символ NULL і символи з кодами від 1 до 31; також . і простір не можуть бути останніми символами; і наступні імена незаконні: com1 com2 com3 com4 com5 com6 com7 com8 com9 lpt1 lpt2 lpt3 lpt4 lpt5 lpt6 lpt7 lpt8 lpt9 con nul prn.
Однак, дещо З цих обмежень можна обійти префікс шляху до файлу \\?\ подобається це: \\?\c:\test...\nul. Принаймні файли з зарезервованими іменами і ті, що закінчуються простором і крапкою, можна маніпулювати таким чином.
Більш того, файлова система NTFS сама підтримує декілька підсистем іменування: DOS, Windows і POSIX. Це підсистема Windows, яка має всі вищезазначені обмеження, тоді як POSIX лише забороняє / і символ NULL.
ОС GNU / Linux (розширена версія POSIX) може таким чином створювати (і видаляти) імена файлів / каталогів, з якими більшість нормальних функцій API Windows (і, отже, програми Windows) не можуть працювати. На Windows XP робота з ними була можлива шляхом встановлення безкоштовної "Підсистеми послуг для Unix" (SFU); на Vista і вище сторонніх інструментів, необхідні для цього. Я не впевнений, що нова підсистема ubuntu-on-windows10 може це зробити.
<test>. Це просто неможливо зробити за допомогою функцій керування файлами Windows.