Answers:
此批处理脚本将执行此操作。
@echo off
set target=%~1
if "%target%"=="" set target=%cd%
setlocal EnableDelayedExpansion
set LF=^
rem Previous two lines deliberately left blank for LF to work.
for /f "tokens=*" %%i in ('dir /b /s /a:-d "%target%"') do (
set ext=%%~xi
if "!ext!"=="" set ext=FileWithNoExtension
echo !extlist! | find "!ext!:" > nul
if not !ERRORLEVEL! == 0 set extlist=!extlist!!ext!:
)
echo %extlist::=!LF!%
endlocal
将其保存为任何.bat
文件,然后使用命令运行batchfile
(替换为您命名的任何文件)以列出当前目录,或者使用来指定路径batchfile "path"
。它将搜索所有子目录。
如果要导出到文件,请使用batchfile >filename.txt
(或batchfile "path" >filename.txt
)。
该for /f...
行之前的所有内容都进行了设置:它获取了要搜索的目标目录,启用了延迟扩展,这使我可以在循环中更新变量并定义一个LF
可用于整整输出的换行符()。哦,它的%~1
意思是“获取第一个参数,删除引号”,以防止引号加倍-参见for /?
。
循环使用该dir /b /s /a:-d "%target%"
命令,获取目标下所有子目录中所有文件的列表。
%%~xi
从dir
命令返回的完整路径中提取扩展名。
空的扩展名将替换为“ FileWithNoExtension”,因此您知道存在这样的文件-如果我添加了空行,则它不是那么明显。
如果通过find
命令发送整个当前列表,以确保唯一性。find命令的文本输出发送到nul
,本质上是一个黑洞-我们不想要它。由于我们总是将a附加:
在列表的末尾,因此,我们还应确保搜索查询以a结尾,:
因此与部分结果不匹配-请参见注释。
%ERRORLEVEL%由find
命令设置,值0表示存在匹配项。因此,如果它不为0,则当前扩展名不在列表中,应添加。
回声线基本上是输出,并且我还:
用换行符替换了占位符()以使其看起来不错。
batchfile "path" >filename.txt
aaa.css
和zzz.cs
,.cs
脚本将不会报告扩展名。
:
以强制其匹配边界而结束。
尽管不严格满足批处理脚本的要求,但我使用了单行powershell脚本:
Get-Childitem C:\MyDirectory -Recurse | WHERE { -NOT $_.PSIsContainer } | Group Extension -NoElement | Sort Count -Desc > FileExtensions.txt
您可以从命令行/批处理文件运行它:
Powershell -Command "& Get-Childitem C:\MyDirectory -Recurse | WHERE { -NOT $_.PSIsContainer } | Group Extension -NoElement | Sort Count -Desc > FileExtensions.txt"
我对此不承担任何责任,当然,您将需要安装Powershell。对于Windows的较新版本,没有任何解决方法。
如果删除C:\MyDirectory
,它将在当前目录中执行。
最后,它将生成一个包含以下内容的FileExtensions.txt:
+-------+------+
| Count | Name |
+-------+------+
| ----- | ---- |
| 8216 | .xml |
| 4854 | .png |
| 4378 | .dll |
| 3565 | .htm |
| ... | ... |
+-------+------+
根据您的文件夹结构,您有时可能会收到错误消息,通知您路径很长。
Get-ChildItem : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
那里的任何子目录也不会被解析,但其他所有结果仍将显示。
这是使用PowerShell的详细答案(在Windows XP中,您必须安装PowerShell):
我发现改变很有用
if "!ext!"=="" set ext=FileWithNoExtension
至
if "!ext!"=="" set ext=.FileWithNoExtension
并改变
echo %extlist::=!LF!%
至
echo %extlist::=!LF!% > ext-list.txt
生成的文件包含(没有换行,但没有关系).bat.pdf.skp.ai.png.jpg.tif.pcp.txt.lst.ttf.dfont.psd.indd.docx.PDF.JPG.gif.jpeg .dwg.exr.FileWithNoExtension.vrlmap.sat.bak.ctb
然后我就可以将其用于我的项目。