Вопрос, вероятно, лучше всего объяснить сценарием, в котором я понял, что две программы работают по-разному.

У меня была старая резервная копия из моих дней Linux на моем жестком диске, содержащая файл с именем con. Как указано в MSDN, con - это зарезервированное имя устройства, которое нельзя использовать для файлов:

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

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9

Таким образом, у меня были проблемы с удалением файла, но с правильным именем, которое я нашел в этой команде из ответа суперпользователя, я смог удалить его:

del "\\.\F:\Movies\Con Man\Con.Man.2018.720p.WEBRip.x264-[YTS.AM].mp4"

Сначала я попытался удалить файл с помощью данной команды через PowerShell. Это выдало ошибку, говоря, что каталог или диск не существует. Только C:\WINDOWS\System32\cmd.exe смог удалить файл. Я запустил обе оболочки с правами администратора.

Поэтому с этого момента я просто хотел знать: почему они ведут себя по-разному? Существует ли какой-то отдельный уровень разрешений для PowerShell или он работает в какой-то специальной песочнице?

1 ответ1

0

Ни.

Командная строка является продолжением старой MS-DOS, где единственным способом связи со специальными устройствами было использование имен их устройств: PRN, CON, Etc ...

Это в основном означает, что файл, вызываемый устройством, после которого в Windows запрещен период. У MS-DOS есть обходной путь, но у Powershell нет. Это в основном означает, что вы не можете работать с файлом, который нарушил это незаконное имя файла в Windows.

Так что да, они очень разные по этой причине. Не только в том, что они могут сделать, но и весь синтаксис другой. Powershell можно использовать для выполнения действий, которые может выполнять командная строка, но не наоборот.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .