首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows delete with with delete erratically

Windows delete with with delete erratically
EN

Stack Overflow用户
提问于 2015-04-15 04:07:43
回答 1查看 144关注 0票数 2

我都快疯了。基本上,我有一个程序,输出表到具有相同结构的多个数据库的平面文件。这些文件的命名格式为tablename_####.dat,其中####是4位数的公司编号。在创建了所有这些文件之后,程序按表名合并所有文件,并在末尾添加一个时间戳。因此,最终文件名的格式为tablename_YYYYMMDD_HHmmSS.dat。最后,我想删除所有单独的.dat文件,只留下组合的、带时间戳的文件。

这对所有的表都很有效,除了表VEX。例如,我有一些文件:

代码语言:javascript
复制
VEX_1234.dat
VEX_5678.dat
VEX_0987.dat

它们结合在一起形成了VEX_20150414_144352.dat。在此之后,我运行以下命令:

代码语言:javascript
复制
`del *_????.dat`

这将删除所有表的单个文件(V_1234.datPAT_9534.dat等),而将组合文件(V_20150414_142311.datPAT_20150413_132113.dat)保留为...except。它会同时删除单个文件和组合文件。这不是应该只删除以下划线、4个字符和".dat“结尾的文件吗?

我知道这一定是我错过的很简单的东西。怎么一回事?

EN

回答 1

Stack Overflow用户

发布于 2015-04-15 04:57:17

您的问题很可能是由较短的8.3文件名引起的。

如果字符在点之前,则?通配符可以匹配0或1个字符。您的文件掩码*_????.dat将匹配包含任意数量字符的任何名称,后跟_,后跟0到4个字符,后跟.dat扩展名。棘手的是,它将尝试同时匹配长文件名和任何短8.3名称(如果存在)。

尝试执行dir /x *.dat命令,并查看问题文件的短名称。我怀疑它会和你的文件掩码相匹配。

短名称的派生方式有一定的模式,但除非您知道文件夹中所有现有的短名称,否则无法预测任何给定文件的短名称,然后您将依赖于未记录的行为。

这是一个相当常见的问题。如果您的文件位于NTFS驱动器上,并且您具有管理员权限,则可以禁用短文件名生成。但这并不会删除已经存在的短名称。

最好的通用解决方案是通过FINDSTR通过/B管道删除不需要的文件,并使用FOR /F处理结果以单独删除每个文件。下面的FINDSTR将排除包含两个或更多_字符的文件名。

代码语言:javascript
复制
for /f "delims=" %%F in ('dir /b *.dat^|findstr /v "_.*_"') do del "%%F"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29636473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档