获取文件扩展名列表的Windows命令
我需要一个命令来获取文件夹中不同的扩展名文件,其中包含每个扩展名的出现次数获取文件扩展名列表的Windows命令,windows,batch-file,cmd,filesystems,file-attributes,Windows,Batch File,Cmd,Filesystems,File Attributes,我需要一个命令来获取文件夹中不同的扩展名文件,其中包含每个扩展名的出现次数 那么我该怎么做呢?您可以用一个PowerShell one衬里来做,如下所示: powershell“$ext=@{};gci*.*.%{$ext[$..Extension]+};$ext” 如果在.bat脚本中使用此选项,请将%符号加倍 在纯批量中,这是我能想到的最简单的方法: @echo off&setlocal 对于(*.*)中的%%I,请执行以下操作( 集合/a外部[%%~xI]+=1 ) 设置分机[ 或压
那么我该怎么做呢?您可以用一个PowerShell one衬里来做,如下所示:
powershell“$ext=@{};gci*.*.%{$ext[$..Extension]+};$ext”
如果在.bat脚本中使用此选项,请将%
符号加倍
在纯批量中,这是我能想到的最简单的方法:
@echo off&setlocal
对于(*.*)中的%%I,请执行以下操作(
集合/a外部[%%~xI]+=1
)
设置分机[
或压缩为一行(仍在.bat脚本中):
@setlocal&@(对于(*.*)中的%%I)do@set/a ext[%%~xI]+=1)&set ext[
或直接从cmd控制台:
cmd/c>NUL(@for%I in(*)do@set/a ext[%~xI]+=1)和set ext[“
(那里的
cmd/c
的行为类似于bat脚本中的setlocal
,帮助您避免使用无用变量破坏环境。)您可以使用PowerShell one liner这样做:
powershell“$ext=@{};gci*.*.%{$ext[$..Extension]+};$ext”
如果在.bat脚本中使用此选项,请将%
符号加倍
在纯批量中,这是我能想到的最简单的方法:
@echo off&setlocal
对于(*.*)中的%%I,请执行以下操作(
集合/a外部[%%~xI]+=1
)
设置分机[
或压缩为一行(仍在.bat脚本中):
@setlocal&@(对于(*.*)中的%%I)do@set/a ext[%%~xI]+=1)&set ext[
或直接从cmd控制台:
cmd/c>NUL(@for%I in(*)do@set/a ext[%~xI]+=1)和set ext[“
(那里的cmd/c
的行为类似于bat脚本中的setlocal
,帮助您避免使用无用变量破坏环境。)这里是解决方案。将此代码保存在.bat
文件中
@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
文件中
@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
谢谢你,最后一个命令对我有效,但我需要一个迭代的方式,我需要所有的文件扩展名在子-folders@LamloumiAfif在
.bat
方法中,使用for/R
递归。在PowerShell方法中,只需将-recurse
开关添加到gci
命令。要包含隐藏的/system文件,请批量使用对于/f“delims=“%%I in('dir/s/b/a:-d')
等。在PowerShell中,将-force
选项添加到gci
+1,无需ext[…]
。您只需使用set/a“%%~xI+=1”
,然后使用set.
查看结果。理想情况下,您应该在顶部放置一个SETLOCAL
。此外,清除任何现有的
或ext[
变量,类似于for/f“delims=”%%V in('set')do set“%%V=”
。无论如何,如果扩展名包含一个数学运算符,如+
,-
,^
等,则此计数方法将失败。哎呀,我错了。如果文件没有扩展名,则使用%%~xI
作为变量名失败:-(谢谢,最后一个命令对我有效,但我需要一种迭代的方式,我需要所有文件扩展名都在sub中-folders@LamloumiAfif在.bat
方法中,使用for/R
递归。在PowerShell方法中,只需将-recurse
开关添加到gci
命令。要包含隐藏的/system文件,请批量使用>对于/f“delims=“%%I in('dir/s/b/a:-d')
等。在PowerShell中,将-force
选项添加到gci
+1,无需ext[…]
。您只需使用set/a“%%~xI+=1”
,然后使用set.
查看结果。理想情况下,您应该在顶部放置一个SETLOCAL
。此外,清除任何现有的
或ext[
变量,类似于for/f“delims=”%%V in('set')do set“%%V=”
。无论如何,如果扩展名包含一个数学运算符,如+
,-
,^
等,则此计数方法将失败。哎呀,我错了。如果文件没有扩展名,则使用%%~xI
作为变量名失败:-(