В Windows Explorer почему мы можем создать папку или файл с символом процента (%), если символ процента используется для существующих переменных?

  1. Перейдите в Проводник Windows и создайте папку / каталог с именем %systemdrive% , %windir% или любой другой существующей переменной.
  2. Откройте командную строку и перейдите в только что созданную папку.

Вы не можете, потому что в имени папки есть процентные ( % ) символы, путающие командную строку, потому что символ процента используется для существующих переменных.

Выход из символа процента ( % ) с символами в два процента ( %% ) не работает, поэтому ответ ДэвидПостилл неверен:

  • Windows 98 на современном компьютере?
  • ОС Windows на внешнем жестком диске
  • Как скопировать текст в командной строке Windows «cmd»?
  • Неправильный язык ввода клавиатуры на экране блокировки Windows 8
  • Bcdedit.exe не распознается ... Win 8.1
  • Windows 10 обнаруживает неправильный часовой пояс
  • Окно командной строки с небольшим количеством рабочего стола Explorer Итак, в Windows Explorer почему мы можем создать папку или файл с символом процента ( % ), если для существующих переменных используется символ процента?

  • Regex Заменить из командной строки
  • Показать дубликаты данных с awk print $ 2, $ 3, $ 4 в одной строке
  • Как просмотреть историю командной строки после закрытия окна в Windows 10?
  • Есть ли ll команда symlink в Windows 7
  • Изменение громкости звука Windows с помощью командной строки
  • Выделите вывод консольного поиска, отображая весь вывод команды
  • 2 Solutions collect form web for “В Windows Explorer почему мы можем создать папку или файл с символом процента (%), если символ процента используется для существующих переменных?”

    Почему мы можем создать папку / файл с символом процента?

    Символ % не является зарезервированным символом в имени файла.

    Зарезервированными символами для именования файлов, путей и пространств имен являются:

     < (less than) > (greater than) : (colon) " (double quote) / (forward slash) \ (backslash) | (vertical bar or pipe) ? (question mark) * (asterisk) 

    Исходные имена файлов, путей и пространств имен


    Символ процента зарезервирован для переменных

    Теперь откройте командную строку и попробуйте перейти в созданную вами папку.

    Вы не можете, потому что в имени папки есть процентные символы, указывающие, что это переменная.

    Вышеизложенное неверно. Все работает так, как вы ожидали.

    Пример использования %test% :

     F:\test>echo %test% %test% F:\test>md %test% F:\test>cd %test% F:\test\%test%> 

    Пример использования %systemdrive% :

     F:\test>echo %systemdrive% C: F:\test>md %systemdrive% A subdirectory or file C: already exists. F:\test>cd %systemdrive% C:\Users\DavidPostill F:\test>c: C:\Users\DavidPostill>f: F:\test> F:\test>dir %systemdrive% Volume in drive C has no label. Volume Serial Number is C8D0-DF1E Directory of C:\Users\DavidPostill 03/06/2016 16:16 <DIR> . 03/06/2016 16:16 <DIR> .. 18/07/2015 19:25 <DIR> .atom 03/06/2016 16:16 <DIR> .oracle_jre_usage 08/05/2015 20:29 <DIR> Contacts 03/06/2016 16:14 <DIR> Desktop 01/06/2016 09:04 <DIR> Documents 02/05/2016 12:55 <DIR> Downloads 09/01/2015 11:51 <DIR> dwhelper 08/05/2015 20:29 <DIR> Favorites 20/02/2016 22:00 <DIR> Jaikoz 08/05/2015 20:29 <DIR> Links 17/03/2015 06:19 <DIR> Music 29/03/2016 19:01 <DIR> Pictures 08/05/2015 20:29 <DIR> Saved Games 23/06/2016 10:55 <DIR> Searches 02/05/2016 12:36 <DIR> SecurityScans 11/04/2016 12:14 994 Start Menu - Shortcut.lnk 31/05/2016 00:52 <DIR> temp 17/03/2015 06:19 <DIR> Videos 1 File(s) 994 bytes 19 Dir(s) 69,716,357,120 bytes free 

    Пропадание в процентах

    Символ % имеет особое значение для параметров командной строки и параметров FOR .

    Чтобы обрабатывать процент как обычный символ, удвойте его:

     %% 

    Синтаксис источника


    Дальнейшее чтение

    • Индекс AZ для командной строки Windows CMD – отличная ссылка для всех связанных строк Windows.
    • Синтаксис – символы побега, разделители и цитаты.

    Ответ Дэвида Постилла велик, но может немного запутать новичков. Я постараюсь перефразировать.

    % Не является зарезервированным символом.

    Это символ со специальным значением командной оболочки (aka cmd.exe и command.com )

    Разница заключается в следующем:

    • Вы не можете использовать зарезервированные символы вообще (но см. Ниже)
    • Вы можете использовать специальные и escape-символы – просто не набрав их как-есть

    Другими словами, вы можете создать файл или папку, содержащую % в их имени. Вы можете сделать это напрямую, используя Windows Explorer, потому что у % нет особого значения. Не было никакого намерения помешать вам создавать такие файлы в командной строке, но поскольку у % есть особое значение, вам нужно использовать синтаксис, описанный ниже, для создания таких файлов.

    BAT-файлы

    Если вы пишете командный файл (* .bat, * .cmd), который запускается командой командной оболочки (например, приложение командной строки), чтобы использовать % буквально (например, чтобы создать файл с % в имени, а не Для замены переменной или параметра) вам нужно вместо этого набрать %% .

    Например,

    • Команда echo %windir% производит вывод: c:\windows
    • Однако команда echo %%windir%% производит выход: %windir%
    • И т. echo %%%%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 здесь не работает).

    % Не является единственным символом со специальным значением в командной строке. Другие включают ^ , < , > , | , ( , ) , & ! , " Большинство из них (исключая " ) могут быть экранированы, то есть с префиксом escape-символа ^ чтобы вставить буквенный символ, подавляя его особый смысл. Они также теряют свою специальную функцию внутри строки с двойной кавычкой и " сбегают с обратной косой чертой: \" . Некоторые кавычки ( ^ ), возможно, необходимо удвоить внутри строки с двойным номером и где замедленная замена переменных имеет место ( ! Особый смысл).

    Командная строка

    К сожалению, при непосредственном вводе команд в окно командной строки, удвоение % символа просто приводит к %% т. %% Вышеприведенный подход не работает в этом случае.

    Кажется, что это обходной путь, использующий причуду в обработке команд – вы можете получить литерал % , набрав ^ после % . Этот подход не является надежным, хотя: если ваше имя файла заключено в двойные кавычки, ^ интерпретируется буквально (и не удаляется, как без кавычек)

    • Команда 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 OS (надмножество POSIX) может создавать (и удалять) имена файлов / каталогов, с которыми большинство нормальных функций Windows API (и, следовательно, программ Windows) работать не могут. В Windows XP работа с ними была возможна путем установки бесплатной подсистемы «Services for Unix» (SFU); Для Vista и выше для этого требуются сторонние инструменты. Я не уверен, что новая подсистема ubuntu-on-windows10 может это сделать.

    Давайте будем гением компьютера.