Відповідь Давида Постілла велика, але може трохи заплутати новоприбулих. Я спробую перефразовувати.
%
не є зарезервований характер.
Це символ з особливе значення до командна оболонка (ака 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.