为什么对于相同的命令,PowerShell 的行为与 cmd.exe 的行为不同?

为什么对于相同的命令,PowerShell 的行为与 cmd.exe 的行为不同?

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

我的硬盘上有我使用 Linux 时的旧备份,其中包含一个名为反对派正如 MSDN 所述反对派是保留的设备名称,不能用于文件:

请勿使用以下保留设备名称作为文件名:

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 使用给定的命令删除该文件。它抛出一个错误,指出目录或驱动器不存在。只有执行文件目录:能够删除该文件。我以管理员权限运行了两个 shell。

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

答案1

两者都不。

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

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

所以,是的,它们确实存在很大差异。不仅仅是它们能做什么,整个语法也不同。Powershell 可以用来做命令提示符能做的事情,但反过来却不行。

相关内容