Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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_Batch File_Cmd_Filesystems_File Attributes - Fatal编程技术网

获取文件扩展名列表的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
作为变量名失败:-(