1. Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.
    Если у вас возникли проблемы с регистрацией на форуме - то вы можете сообщить об этом с помощью этой формы без авторизации,администрация форума обязательно отреагирует на вашу проблему.
    Скрыть объявление

Что означает символ обратного слеша "\" в пути

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Dragokas, 12 дек 2014.

  1. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    Еще м.б. "простенькая" задачка.
    Собственно, есть путь (хотя, Вы можете привести и пару других вариантов написания ;)):

    Код (Text):
    c:\каталог1\каталог2\файл.txt
    Расскажите, для чего используется знак "\" (интересуют все варианты) ?
     
  2. dzu

    dzu Активный пользователь

    Сообщения:
    1.018
    Симпатии:
    625
    обратный слеш?
     
  3. shestale

    shestale Ассоциация VN/VIP Преподаватель

    Сообщения:
    9.099
    Симпатии:
    4.829
    "\" - означает что перед ним родительский каталог, а после это то, что находиться в нем...разве может быть другая интерпретация?
     
  4. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    shestale, еще как минимум, 3 интерпретации ;) (и все они не противоречат друг другу)

    не обязательно. Не все из слешей, указанных выше.

    ++ Что если слеши стоят:
    - в самом начале пути ?
    - в самом конце пути ?
     
    Последнее редактирование: 12 дек 2014
  5. shestale

    shestale Ассоциация VN/VIP Преподаватель

    Сообщения:
    9.099
    Симпатии:
    4.829
    Dragokas, ты примеры приведи, а то не понятно откуда это, и ответы могут поэтому отличаться от того о чем ты спрашиваешь.
    п.с.
     
    fseto и Dragokas нравится это.
  6. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    Да. Конечно.

    Код (Text):
    c:\каталог1\каталог2\файл.txt
    Если исходить из этого правила, то получится, что:
    c: - будет родительским каталогом для "каталог1". Это не так.
    Ты может проверить это, запустив консоль и введя:
    Код (Text):
    d:
    где d - буква любого существующего у тебя диска, кроме системного.
    Затем вводишь:
    Код (Text):
    c:
    и обрати внимание, в какой папке ты окажешься.
    Прямой ответ сознательно не даю.

    Итак, пишу варианты, в которых слеш \ имеет особое значение:
    1)
    \каталог1\каталог2\файл.txt
    аналогичное правило для:
    c:\каталог1\каталог2\файл.txt

    2)
    каталог1\каталог2\

    3)
    \\?\c:\каталог1
    и похожая конструкция с чуть отличающимся смыслом:
    \\.\c:\каталог1

    4)
    \\server\share

    Вот и хотелось бы разжечь интерес участников форума вопросом:
    что означает \ для каждого из 4 случаев...
     
    Последнее редактирование: 13 дек 2014
  7. Alex1983

    Alex1983 Разработчик

    Сообщения:
    876
    Симпатии:
    553
    Если Patch превышает 256 (если не ошибаюсь) символов то применяется данная последовательность. Это в программирование.
     
  8. shestale

    shestale Ассоциация VN/VIP Преподаватель

    Сообщения:
    9.099
    Симпатии:
    4.829
    как обычно здесь: C:\Windows\System32>
     
  9. Alex1983

    Alex1983 Разработчик

    Сообщения:
    876
    Симпатии:
    553
    У меня в папке пользователя
    Код (Text):
    C:\Users\Aibolit
     
  10. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    Как видишь, это оказалась не родительская папка для "каталог1".
     
  11. Phoenix

    Phoenix Активный пользователь

    Сообщения:
    2.087
    Симпатии:
    2.039
    по 1 и 2-му частично вот иллюстрация.
    Код (Text):
    C:\Users\жмека>cd users
    Системе не удается найти указанный путь.

    C:\Users\жмека>cd \users
    C:\Users>
    --- Объединённое сообщение, 12 дек 2014, Дата первоначального сообщения: 12 дек 2014 ---
    а так обратно, на уровень выше.
    Код (Text):
    C:\Users>cd жмека\
    C:\Users\жмека>
     
  12. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    Phoenix, на счет концевого слеша. Создай файл file
    и проверь его наличие:
    Код (Text):
    if exist file\ echo Y
    if exist file echo Y
    Здесь будет ощущатся разница.
    --- Объединённое сообщение, 12 дек 2014 ---
    Так что, догадались, что означает начальный слеш ?
     
    Drongo нравится это.
  13. Phoenix

    Phoenix Активный пользователь

    Сообщения:
    2.087
    Симпатии:
    2.039
    Код (Text):
    C:\Users\жмека>if exist file.txt\ echo Y
    C:\Users\жмека>if exist file.txt echo Y
    Y
    Код (Text):
    C:\Users\жмека>cd..
    C:\Users>
    Ну вот известная команда - так переходит на уровень ниже.. :Dash1:
     
    Последнее редактирование: 12 дек 2014
  14. Drongo

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.903
    Симпатии:
    8.234
    Phoenix, скорее всего подразумевалось файл без расширения. Точка и отсутствие слеша в конце говорит что это файл, а последний слеш покажет что это папка. Кстати в программировании есть такая функция

    ExtractFileExt() - извлечение расширения из файла. Но вот какая бяка, когда скажем ты записываешь строку Test.MyFolder
    Код (Text):
    ExtractFileExt("Test.MyFolder")
    То функция вернёт тебе .MyFolder, даже если это будет имя папки записаное с точкой.
     
  15. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    Да. Концевой слеш однозначно идентифицирует то, что последним копонентом в указанном пути является папка, а не файл.
    --- Объединённое сообщение, 13 дек 2014, Дата первоначального сообщения: 13 дек 2014 ---
    Да. \ - обратный слэш. / - обычный (прямой) слеш.

    Норма для пути в ОС Windows - это обратный слеш.
    Если указать вместо него обычный:
    Код (Text):
    c:/каталог/файл
    файловая система это нормально скушает.

    Поясню, приведя вольный перевод выдержек из справки:
    Каждый раз, когда Вы куда-либо вводите путь (в строку проводника или в некоторых функциях в программировании)
    происходит так называемая нормализация пути:
    - слешы / заменяются на обратные \
    - переменные окружения, например %windir%, раскрываются в полный путь
    - относительный путь преобразовуется в полный, в том числе раскрываются точки (.) и (..),
    например, c:\path1\path2\..\file преобразовуется в c:\path1\file
    (.. - обзначает ссылка на родительский каталог; . - означает ссылка на текущий каталог)
    - происходит проверка корректности семантики символов. Так, нижеуказанные символы имеют специальное значение
    и не могут быть использованы для именования файловых объектов:
    • < (знак меньше)
    • > (знак больше)
    • : (двоеточие)
    • " (кавычка)
    • / (прямой слеш)
    • \ (обратный слеш)
    • | (вертикальная черта или канал)
    • ? (знак вопроса)
    • * (звездочка)
    • символы с кодом ASC от 1 до 31, кроме именования файловых потоков, где это разрешено
    • символ NUL (ASC = 0), который обозначает окончание строки
    - проверка ограничения на маскимальную длину пути в 260 символов (константа MAX_PATH): C:\строка длинной 256 символов<NUL>
    При этом для каталогов остается еще меньше символов: 260 - (8 + 3 + 1) = 248, т.е. C:\каталог(и) длинной 243 символа\файл длинной 8.3<NUL>
    8.3 - означает 8 символов для имени и 3 символа - для расширения имени.
    - путь не должен заканчиваться знаком пробела или точкой.
    - отсутствие зарезервированных системой имен CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9.

    Большинство правил нормализации перестают действовать,
    если в начале пути указать специальный набор символов: \\?\ - это будет работать только в юникодных функциях.

    Таким образом, можно создать файл, который обычным способом удалить нельзя.
    Кроме того, отключается проверка на максимальную длину пути,
    которая теперь станет достигать ~32767 символов с ограничением в 255 символов для каждого компонента в таком пути.

    \\.\ - используется для прямого доступа к устройствам (но не файлам) через специальніе API-функции. Пример \\.\PhysicalDiskX, \\.\COM100, \\.\CdRomX
     
    Последнее редактирование: 13 дек 2014
    dzu, Drongo, ScriptMakeR и 2 другим нравится это.
  16. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    \file.txt

    Если слеш стоит вначале (или после двоеточия C:\) - он обозначает корень текущего диска.
    Вы можете это проверить, открыв любую папку в проводнике и введя знак \ а за ним любое имя файла из корня диска.

    C:
    C:
    - не всегда является корнем. Двоеточие после буквы диска - означает текущий каталог на этом диске.

    Текущий каталог - это папка, путь которой хранится вместе с другими данными о процессе.
    При этом путь к текущему каталогу запоминается для каждого из дисков.
    Приведем пример:
    curr_test.

    Если текущий каталог более не существует на диске, он автоматически сменяется на корневой каталог.
    По-умолчанию, текущим каталогом для других дисков также является их корневой каталог.

    По умолчанию, при создании процесса, текущим каталогом для него становится:
    1) если процесс создан с обычными правами, то каталог родительского процесса (если иное не было задано в параметрах функции CreateProcess, например, с помощью ключа /D команды Start);
    2) если процесс запущен с повышенными привилегиями через механизм UAC, то папка %SystemRoot%\System32
     
    Последнее редактирование: 14 дек 2014
    sov44, Phoenix, ScriptMakeR и 2 другим нравится это.
  17. ScriptMakeR

    ScriptMakeR Клуб переводчиков

    Сообщения:
    1.452
    Симпатии:
    514
    Dragokas,
    Другими словами, система запоминает последний открытый каталог на диске и, при переходе на этот диск без указания корня, открывает последний открытый каталог?
     
  18. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    ScriptMakeR, не система - каждый процесс в системе.
    Да, если указать вот так D:
    Только нужно учитывать, что программа, с которой ты экспериментируешь, может иметь свою внутреннюю реализацию нормализации пути,
    и подставлять вместо D: - D:\. Проводник, например, такую замену делает.
     
  19. Сергей

    Сергей Активный пользователь

    Сообщения:
    279
    Симпатии:
    129
    А мне кажется, что все варианты есть частными случаями \\?\c:\каталог1\, просто система сама дописывает "в уме" то, чего не хватает в предложенной ей записи, и дописивыет тем, что поумолчанию или "под рукой".
    --- Объединённое сообщение, 15 дек 2014 ---
    А если вспомнить про иерархию файловой системы, то "\" - некий розделитель в таблице вложений...
     
  20. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.279
    Симпатии:
    5.154
    Нет, не дописывает. Все на совести разработчика.
    К тому же запись вида \\?\ может быть корректно обработана только внутри юникодных функций, при том не всех, и будет также означать отмену ограничения в макс. длину пути.

    Также отдельно стоит выделить такую запись:
    \\Server\Share
    Называется это - UNC (Universal Naming Convention) и задает Server - имя сервера в локальной сети
    и Share - имя расшаренной папки на этом сервере.

    Для такой записи также доступна отмена нормализации пути.
    Чтобы ее применить, используйте префикс \\?\UNC\ например:
    Код (Text):
    \\?\UNC\Server\Share
     

Поделиться этой страницей

Загрузка...