这个问题可能最好用以下场景来解释,我意识到这两个程序的运行方式不同。
我的硬盘上有我使用 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 可以用来做命令提示符能做的事情,但反过来却不行。