バッチを使用してすべての空のディレクトリを見つける方法


6

バッチスクリプトを使用してすべての空のディレクトリを見つけるにはどうすればよいですか?

デスクトップに「shows」というフォルダがあります。内部には多くのサブディレクトリがあります。一部のディレクトリは空で、他のディレクトリにはいくつかのファイルがあります。

すべてのサブフォルダーをループし、空のすべてのフォルダーを印刷するにはどうすればよいですか?

以下は私が試したものです。問題は、サブフォルダーが空でない場合でも、すべてのフォルダーを印刷することです。

@echo off

SET "MYPATH=C:\Users\dave\Desktop\shows"

 for /d %%a in ("%mypath%\*") do (
    dir /b /s "%MYPATH%"
    pause
)
pause

回答:


7

ここに一つの方法があります。

コマンドラインから:

for /r "C:\Users\dave\Desktop\shows" /d %F in (.) do @dir /b "%F" | findstr "^" >nul || echo %~fF

バッチスクリプトの使用:

@echo off
setlocal
set "myPath=C:\Users\dave\Desktop\shows"
for /r "%myPath%" /d %%F in (.) do dir /b "%%F" | findstr "^" >nul || echo %%~fF

5

PowerShellを使用できます!このワンライナーがトリックを行います:

Get-ChildItem 'C:\Users\dave\Desktop\shows' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object {$_.FullName}

最初の部分(で始まるGet-ChildItem)は、その1つのフォルダーのすべてのサブディレクトリーを検索します。2番目の部分(Where-Object)は、それらの結果を、ファイルやフォルダーのいずれの種類のファイルシステムエントリもない結果にフィルターします。最後に、ForEach-Object見つかったフォルダーのフルネームが吐き出されます。

エイリアスと略語を使用して、その行をかなり圧縮できます。

gci -Dir -r | ? {[IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | % {$_.FullName}

最後に、バッチから呼び出すことができます:

powershell -command "gci -Dir -r | ? {[IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | % {$_.FullName}"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.