如何删除带有尾随空格(或句点)字符的Windows文件



如何删除意外创建的名为"的零字节文件;打电话给">

我正面临着一个直到现在都无法解决的问题?

我尝试使用命令Del,但没有机会。

@echo off
set "targetdir=C:FolderDir"
for /f "delims=" %%a in ('dir/s/b/a-d "%targetdir%*.*"') do ( if %%~Za equ 0 echo %%~na>>results.txt && del "%%~a" )

我还试图删除包含这个文件"的目录;呼叫";

RD /S /Q [ParentFolder with file Call Inside]

我也尝试过Powershell:

Get-ChildItem -Path "C:MyFolderDir" -Recurse -Force | Where-Object { $_.PSIsContainer -eq $false -and $_.Length -eq 0 } | remove-item

编辑:

我执行下面由@Compo在他的评论中提供的命令:

%SystemRoot%System32where.exe /T /F "C:FolderDir":"*call*"

我得到的结果是这样的:

? ? ? "C:UsersHackooDesktopScriptingCall "

Windows底层文件系统确实支持以空格或句点结尾的文件名或目录名,因此可以创建它们。但是,与shell应用程序一起使用的Windows Win32文件命名空间API函数不起作用。在您的情况下,根据您提供的信息,我确定您的实际文件名不是Call,而是Call

为了澄清后面有一个空白字符,我要求您使用where.exe实用程序检查文件名,该实用程序使用其/F选项将显示双引号的文件路径。我还包括了/T选项,它将确认文件的大小和修改日期的详细信息。

%SystemRoot%System32where.exe /T /F "C:UsersHackooDesktopScripting":"*call*"

根据您提供的说明,我的假设是正确的,您只需要一种删除文件的方法,绕过API的字符串解析。

您可以在此处阅读有关文件、路径和命名空间的所有Windows规则。

应该在前面提到的链接的信息中注意到,解决问题的方法是使用\?前缀,以绕过强制执行。

Del /A /F "\?C:UsersHackooDesktopScriptingCall "

在您的情况下,正如文件属性-a----所示,如另一条注释所示,您并不真正需要/A/F选项,因此以下内容就足够了:

Del "\?C:UsersHackooDesktopScriptingCall "

为了完整性,您可以在powershell中做同样的事情:

Remove-Item -LiteralPath "\?C:UsersHackooDesktopScriptingCall "

可能是从gitbash创建的文件,在那里创建一个带有尾部空格的文件很容易。

touch "call "

而且从bash 中删除它也很容易

rm "call "

相关内容