想要根据文件扩展名将文件名复制到目录中的文本

时间:2014-03-09 08:03:39

标签: windows command-line

我想根据文件扩展名将文件名复制到目录中的文本。

截至目前,我正在使用dir /b >i67.txt这对我来说很好,但它没有解决特定文件扩展名的问题。

有人可以帮助我获取相同的批处理脚本。

2 个答案:

答案 0 :(得分:0)

您正在寻找以下命令,在包含您的文件的目录的上下文中运行它:

dir /b /s /-p *.txt /o:n | findstr /E .txt > i67.txt

使用上面的代码示例,您将能够找到目录中的所有*.txt个文件,并将结果输出到i67.txt文件中(将输出到同一目录中)。

答案 1 :(得分:0)

您可以在一个DIR / B命令中指定多个文件掩码。根据您对Yair Nevet的回答的评论,您似乎需要以下扩展程序:.ovr.inc.dat。这可以简单地使用:

dir /b /s *.ovr *.inc *.dat >i67.txt

如果文件位于启用了短8.3名称的NTFS卷上,那么如果您的任何文件扩展名超过4个以所需扩展名开头的字符,则可能会获得其他不需要的文件扩展名。例如,someName.data会显示在您的输出中,因为它很可能会有一个与您的文件掩码匹配的短名称SOMENA~1.DAT

您可以通过将输出传递给FINDSTR来防止包含短名称。 /L选项强制进行文字搜索而不是正则表达式,/I选项忽略大小写,/E选项仅匹配每行的结尾。多个搜索词由空格分隔。

dir /b /s *.ovr *.inc *.dat | findstr /lie ".ovr .inc .dat"

关于您的以下评论:

  

以下是我现在使用的内容:dir / b | findstr [a-z]。* ovr> i67.txt&&   dir / b | findstr [a-z]。* inc>> i67.txt&& dir / b | FINDSTR   [a-z]。* dat>> i67.txt它做什么? ---它复制了所有   名字(请记住,除了文件本身以外,只有名称   扩展名.ovr .dat和.cpi)存在于目录中并将其复制到   文本文件(此处名称为i67.txt)

由于多种原因,这实际上并不能满足您的需求。

  • Windows文件名不区分大小写。 Windows会将NAME.OVR和name.ovr视为相同,所以你也应该这样做。这需要/I选项。

  • 您的搜索中没有任何内容可以将ovr锚定到扩展名。它将在文件名中的任何位置查找您的模式。点是一个元字符,代表任何字符 - 而不是字面点。星号允许点匹配任意数量的字符。

我无法确定,但看起来您可能只想匹配以字母开头的文件。对我的回答进行以下修改应该可以解决问题:

dir /b /s *.ovr *.inc *.dat | findstr /ri "^[a-z].*\.ovr$ ^[a-z].*\.inc$ ^[a-z].*\.dat$"

\R选项强制使用正则表达式匹配而不是文字。这是给定搜索的默认行为,但关于正则表达式与文字搜索的关系是明智的。

^将搜索锚定到名称的开头

[a-z]匹配任何字母(有点)。请记住,由于/I选项,它不区分大小写。如果没有/I选项,则不会匹配大写Z。有关说明,请参阅Why does findstr not handle case properly (in some circumstances)?

.*匹配任意数量的字符,不受限制

\.匹配点文字,标记扩展名的开头

然后是你的扩展

$将匹配锚定到名称的末尾

相关问题