Dmi*_*kin 4 excel vba excel-vba
我试图用扩展名杀死所有文件 xls
Sub testt()
downloadF = Environ("USERPROFILE") & "\Downloads\*.xls"
Kill downloadF
End Sub
Run Code Online (Sandbox Code Playgroud)
但它也杀了文件.xlsx和.xlsm一切与.xls*
为什么?
怎么只杀*.xls?
我有一个关于为什么会发生这种情况的理论,但我还没有完全证明这一点......与此同时我发现另一种只删除目标文件的方法是引用文件的"short"(8.3)名称:
例如,当我第一次检查我的(NTFS)驱动器时,在命令提示符下使用/X开关Dir:
t.xlsx有一个简短的名字TF99B~1.XLS
......并且Dir /x:
......并以编程方式:
Option Explicit
Private Declare Function GetShortPathNameA Lib "kernel32" _
(ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Public Function ShortPath(ByVal fName As String) As String
Dim fNum As Integer, strBuffer As String * 255
fNum = FreeFile
If Dir(fName) = "" Then
On Error Resume Next 'Create file if it doesn't exist
Open fName For Output As #fNum
Close #fNum
End If
ShortPath = Left$(strBuffer, GetShortPathNameA(fName, strBuffer, 255))
End Function
Run Code Online (Sandbox Code Playgroud)
正如@Pᴇʜ指出的那样,如果从文件中删除它们,例如.有:
fsutil 8dot3name strip c:\temp\test
Run Code Online (Sandbox Code Playgroud)
...该Kill命令按预期工作(并且不会被杀死xlsx).
fsutil 8dot3name strip:删除8dot3位于指定位置的所有文件的文件名DirectoryPath.对于与文件名组合包含超过260个字符的8dot3任何文件,不会删除DirectoryPath文件名.
此命令列出但不修改指向已永久删除8dot3文件名的文件的注册表项.
有关从文件中永久删除8dot3文件名的影响的详细信息,请参阅" 备注".
...并通过命令行同时为整个文件夹或卷:
要查询 特定卷的磁盘卷的禁用
8dot3名称行为,请使用:Run Code Online (Sandbox Code Playgroud)fsutil 8dot3name query Volume{xyz-VolumeGUID-xyz}您还可以
8dot3使用behavior子命令查询名称行为.要删除
D:\MyData目录和所有子目录中的8dot3文件名,同时将信息写入指定为的日志文件mylogfile.log,请键入:Run Code Online (Sandbox Code Playgroud)fsutil 8dot3name scan /l mylogfile.log /s d:\MyData
更多信息:
' 来源:命名文件,路径和命名空间(微软)
所有文件系统都遵循单个文件的相同通用命名约定:基本文件名和可选扩展名,以句点分隔.但是,每个文件系统(例如NTFS,CDFS,exFAT,UDFS,FAT和FAT32)可以具有关于在目录或文件的路径中形成各个组件的特定和不同规则.
...
字符数限制也可以不同,并且可以根据使用的文件系统和路径名前缀格式而有所不同.通过支持向后兼容机制,这进一步复杂化.例如,旧
MS-DOSFAT文件系统最多支持基本文件名的8个字符和扩展名的3个字符,总共12个字符,包括点分隔符.这通常称为8.3文件名.Windows FAT和NTFS文件系统不限于8.3文件名,因为它们具有长文件名支持,但它们仍支持8.3长文件名的版本.
\\?\Win32文件命名空间
对于文件I/O,\\?\路径字符串的前缀告诉Windows API禁用所有字符串解析并将其后面的字符串直接发送到文件系统.例如,如果文件系统支持大型路径和文件名,则可以超出MAX_PATHWindows API强制执行的限制.有关正常最大路径限制的详细信息,请参阅最大路径长度限制一节.
因为它关闭了路径字符串的自动扩展,所以\\?\前缀还允许在路径名中使用..和.,如果您尝试使用这些保留的相对路径说明符作为完整的一部分对文件执行操作,这可能很有用.合格的道路.
许多但不是所有文件I/O API都支持\\?\; 您应该查看每个API的参考主题.
\\.\Win32设备命名空间
该\\.\前缀将访问的Win32设备名称空间的,而不是Win32文件的命名空间.如果API支持此类访问,则无需通过文件系统即可直接访问物理磁盘和卷.您可以通过这种方式访问磁盘以外的许多设备(例如,使用CreateFile和DefineDosDevice功能).
NT命名空间
还有一些API允许使用NT命名空间约定,但Windows对象管理器在大多数情况下都不需要这样做.为了说明,使用Windows Sysinternals WinObj工具浏览系统对象浏览器中的Windows命名空间很有用.当您运行此工具时,您看到的是从根目录开始的NT命名空间,或\.调用的子文件夹Global??是Win32命名空间所在的位置.
FAT命名惯例
来源:FAT,HPFS和NTFS文件系统概述(Microsoft)
FAT使用传统的
8.3文件命名约定,并且必须使用ASCII字符集创建所有文件名.文件或目录的名称最长可达八个字符,然后是句点.分隔符,最多可包含三个字符的扩展名.名称必须以字母或数字开头,并且可以包含除以下内容之外的任何字符:
. " / \ [ ] : ; | = ,如果使用这些字符中的任何一个,可能会出现意外结果.名称不能包含任何空格.
NTFS命名约定
文件和目录名称最长可达255个字符,包括任何扩展名.名称保留大小写,但不区分大小写.NTFS根据大小写不区分文件名.名称可以包含除以下内容之外的任何字符:
? " / \ < > * | :目前,从命令行,您只能创建最多253个字符的文件名.
注意:基础硬件限制可能会在任何文件系统中施加额外的分区大小限制.特别是,启动分区的大小只有7.8 GB,分区表中有2 TB的限制.
MSDN:DeleteFile函数
MSDN:DeleteFileFromApp函数