为什么PowerShell的行为与给定相同命令的cmd.exe不同?


0

这个问题最好用场景来解释,我意识到这两个程序的运行方式不同。

我的Linux硬盘上有一个旧备份,包含一个名为con的文件。如MSDN所述con是保留的设备名称,不能用于文件:

不要将以下保留的设备名称用于文件名:

CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,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才能删除该文件。我用管理员权限运行了两个shell。

所以从这一点开始我只想知道:为什么他们的行为不同?PowerShell是否存在某种单独的权限级别,还是在某种特殊的沙箱中运行?


1
保持 - 您的示例中的文件实际上没有命名con,是吗?
grawity

@grawity是的。我引用的命令并不专门用于名为con的文件,但是我将它用于名为con(并且只有con)的文件,并且它通过cmd.exe工作。我认为这是一些自动生成的文件,它恰好出现在我在Linux上的软件开发者时代。我现在不知道它是如何具体出现的。
narranoid

Answers:


0

都不是。

命令提示符是旧MS-DOS的延续,其中与特殊设备通信的唯一方法是使用它们的设备名称:PRN,CON,Etc ......

这基本上意味着设备调用的文件,后跟句点在Windows中是非法的。MS-DOS有一个解决方法,但Powershell没有。这基本上意味着您无法使用在Windows中违反此非法文件名的文件。

所以,是的,因为这个原因他们非常不同。不只是他们能做什么,而是整个语法不同。Powershell可用于执行命令提示符可以执行的操作,但不能用于其他方式。


我知道PowerShell的额外功能,但在我的情况下,我使用了两个可用的命令,PowerShell仍然遇到麻烦。首先我也尝试了PowerShell中的Remove-Item,但它引发了访问号码错误。
narranoid

我试图解释路径本身是特殊的,因为powershell可以正常访问文件,不需要使用特殊的访问路径,它也不起作用。
LPChip

但是在我尝试使用常规路径语法删除它之后,我开始研究特殊的访问路径语法。这在PowerShell中也不起作用。
narranoid

做了一些测试,看起来确实PowerShell无法访问该文件。Powershell不了解替代流,例如\\。\所以它也无法解决。但你问,他们是不同的,是的,他们是。但我会编辑我的答案以纠正我犯的错误。
LPChip

哇,谢谢你的努力!这对我现在的问题来说是一个相当不错的答案。
8
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.