2017-05-19 5 views

답변

4

이 같은 PowerShell을 한 줄에 그것을 할 수 :

powershell "$ext = @{}; gci *.* | %{ $ext[$_.Extension]++ }; $ext" 

을하는 박쥐 스크립트에서 두 번 % 기호를이를 사용하는 경우.

@echo off & setlocal 

for %%I in (*.*) do (
    set /a ext[%%~xI] += 1 
) 

set ext[ 

또는 (여전히 박쥐 스크립트)를 한 줄에 응축 :

@setlocal & @(for %%I in (*.*) 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) 거기에 쓸모있는 변수로 환경을 정크하는 것을 피하는 데 도움이되는 setlocal과 같은 동작을합니다.

+0

마지막 명령이 작동하지만 고맙습니다. 반복적 인 방법이 필요합니다. '.bat' 메쏘드에 폴더 –

+0

@LamloumiAfif가 있다면, for/R을 사용하여 재귀 할 수 있습니다. PowerShell 방법에서는'-recurse' 스위치를'gci' 명령에 추가하기 만하면됩니다. 숨김/시스템 파일을 포함 시키려면'for/f "를 사용하십시오. delims ="%% I in ('dir/s/b/a : -d')'등. PowerShell에서'-force' 옵션을 'gci'. – rojo

+0

+1,'ext [...]'필요 없음. 단순히'set/a "%% ~ xI + = 1"'을 사용하고'set. '을 사용하여 결과를 볼 수 있습니다. 이상적으로 상단에'SETLOCAL'을 두어야합니다. 또한, 기존의'.' 또는'ext ['for/f "delims =="%% V in ('set.')와 같은 변수를 지우는 것은 "%% V ="를 설정하는 것을 해치지 않을 것입니다. '. 어쨌든,이 계산 방법은 확장에'+','-','^'등과 같은 수학 연산자가 포함되어있는 경우에는 실패합니다. – dbenham