Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 要根据文件扩展名将文件名复制到目录中的文本吗_Windows_Command Line - Fatal编程技术网

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

Windows 要根据文件扩展名将文件名复制到目录中的文本吗,windows,command-line,Windows,Command Line,我想根据文件扩展名将文件名复制到目录中的文本中 到目前为止,我正在使用dir/b>i67.txt,这对我来说很好,但并没有解决特定文件扩展名的问题 是否有人可以帮助我获取相同的批处理脚本。如果要查找以下命令,请在包含文件的目录的上下文中运行它: dir /b /s /-p *.txt /o:n | findstr /E .txt > i67.txt 使用上述代码示例,您将能够找到目录中的所有*.txt文件,并将结果输出到i67。txt文件将输出到同一目录。您可以在一个DIR/B命令中指定

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

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


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

如果要查找以下命令,请在包含文件的目录的上下文中运行它:

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

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

您可以在一个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选项强制正则表达式匹配,而不是文本匹配。这是给定搜索的默认行为,但是对于regex与literal搜索来说,显式是一个好主意

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

[a-z]匹配任何类型的字母。请记住,由于/I选项,它不区分大小写。如果没有/I选项,它将与大写字母Z不匹配。有关解释,请参阅

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

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

然后是你的分机


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

我不知道你的意思。但似乎可以使用dir/b/o:e对文件列表进行排序。这就是你想要的吗?谢谢你的建议,我已经做到了。下面是我现在使用的: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@aks_webmethods-那不会像你想的那样。见下文。