purple1437
purple1437

Reputation: 313

How can I get a list of folders/subfolders that DOES NOT contain a specific type of file?

For example, I wanted to print a list of folders which contain an .html file. Correct me if I am wrong, but this worked for me:

dir /S *.html > C:\Users\PC\Desktop\with-html.txt

Now I would like to find the folders which do not contain .html files.

How do I go about that?

EDIT:

The folders are structured in a way that only the child folders (last subfolder) have any kind of files. I would like to get a list of directories to those subfolders. So the above command line is giving me:

C:\...\ml\regression\lasso-regression
C:\...\ml\regression\linear-regression

There is not output just C:\...\ml or C:\...\ml\regression.

The folder structure looks like this:

There are about 10 folders in folder ml and no files. There are again about 10 folders in second folder level where C:\...\ml\regression\linear-regression contains an HTML file while C:\...\ml\regression\lasso-regression does not contain a file with file extension .html. Only the folders in last level of the folders tree have files at all.

I'd be grateful getting just the list of the last folders in folders tree not containing a file with file extension .html.

I basically output the above command line into a .csv file, filtered it with MS Excel, and have now a list of folders with .html file(s). I'm basically working with R-markdown files, and it'll be a status report, the folders list with .html files is what I have completed already. So in need now only the opposite folders list.

Upvotes: 0

Views: 1406

Answers (1)

lit
lit

Reputation: 16236

Not difficult using PowerShell.

Get-ChildItem -Recurse -Directory |
    ForEach-Object {
        if ((Get-ChildItem -File -Path $_.FullName -Filter '*.html').Length -eq 0) { $_.FullName }
    }

If you must run this in a .bat file script, the following might be used.

@powershell.exe -NoLogo -NoProfile -Command ^
    "Get-ChildItem -Recurse -Directory |" ^
        "ForEach-Object {" ^
            "if ((Get-ChildItem -File -Path $_.FullName -Filter '*.html').Length -eq 0) { $_.FullName }" ^
        "}"

Upvotes: 1

Related Questions