如何删除意外创建的名为"的零字节文件;打电话给">
我正面临着一个直到现在都无法解决的问题?
我尝试使用命令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 "