如何删除 Windows 上以点 (.) 结尾的目录?

pur*_*aso 4 windows powershell 7zip windows-server-2012-r2 powershell-5.0

我错误地创建了一个文件,并且我一生都无法删除它。如果您安装了7-Zip,则可以生成它。如果没有,安装也很容易。

以下是文件的创建方式:

PS C:\temp> mkdir abc
PS C:\temp> cd abc

PS C:\temp\abc> & 'C:\Program Files\7-Zip\7z.exe' a -spf .\DuoWindowsLogon.admx,.\en-us\DuoWindowsLogon.adml

Creating archive: .\DuoWindowsLogon.admx,.\en-us\DuoWindowsLogon.adml
Run Code Online (Sandbox Code Playgroud)

后来,我了解到我应该输入的正确命令是:

& 'C:\Program Files\7-Zip\7z.exe' a abc.7z -spf DuoWindowsLogon.admx en-us\DuoWindowsLogon.adml
Run Code Online (Sandbox Code Playgroud)

意识到错误后,我尝试删除错误创建的目录:

PS C:\temp\abc> ls
d-----       11/15/2020  11:09 PM                DuoWindowsLogon.admx,.

PS C:\temp\abc> ls D*
ls : Could not find item C:\temp\abc\DuoWindowsLogon.admx,..

PS C:\temp\abc> ls | rm
rm : Cannot find path 'C:\temp\abc\DuoWindowsLogon.admx,.' because it does not exist.

PS C:\temp\abc> rm *
rm : An object at the specified path C:\temp\abc\DuoWindowsLogon.admx,. does not exist.

PS C:\temp\abc> cd ..
PS C:\temp> rm -recurse abc
rm : Could not find a part of the path 'C:\temp\abc\DuoWindowsLogon.admx,'.
Run Code Online (Sandbox Code Playgroud)

如您所见,没有任何效果。我还尝试了文件浏览器(GUI),它也不起作用。我怎样才能删除该目录?

附:

我在 CMD 提示符下尝试了“del /s”,它没有产生错误,但文件没有被删除:

c:\>del /s c:\temp\abc
c:\temp\abc\*, Are you sure (Y/N)? Y

c:\>dir c:\temp\abc
11/15/2020  11:09 PM    <DIR>          DuoWindowsLogon.admx,.
Run Code Online (Sandbox Code Playgroud)

Boo*_*Roo 6

您可以删除以“.”结尾的目录。通过在其前面加上前缀\\?\

因此,根据您的情况,您可以使用:

Remove-Item `\\?\C:\temp\abc\DuoWindowsLogon.admx,.` -Recurse
Run Code Online (Sandbox Code Playgroud)

此处记录了这一点:您无法删除 NTFS 文件系统卷上的文件或文件夹

如果文件名包含无效名称(例如,文件名尾随空格或尾随句点或文件名仅由空格组成),您可能无法删除文件。要解决此问题,请使用采用适当内部语法的工具来删除文件。您可以使用“ \\?\”语法和一些工具来操作这些文件,例如:

del "\\?\c:\<path_to_file_that contains a trailing space.txt>"
Run Code Online (Sandbox Code Playgroud)

此问题的原因与原因 4 类似。但是,如果您使用典型的 Win32 语法打开名称中包含尾随空格或尾随句点的文件,则在打开实际文件之前尾随空格或句点将被删除。