51

Windows does not use the dot-file convention for hidden files. However, many Windows applications (mostly opensource/cross-platform) use files and folders with this convention. How can I make Windows Explorer automatically hide these dot-files?

1
  • 1
    One caveat is that Windows hidden files work differently than Linux/MacOS. This makes the files hidden to other tools too, as pointed out in some other answers. This can cause errors to happen in unexpected situations. Dec 27, 2022 at 11:39

6 Answers 6

39

ATTRIB +H /s /d C:\.* is the command to hide anything, directories included that start with a dot

This won't list the files (as stated below), but will hit every file it can access, and apply the Hidden attribute.

Once this is done, you can make sure that the Folder Options are set to hide hidden files. Click on Start, type folder options and press Enter. Click on the View tab, then choose Don't show hidden files, folders, or drives under Files and Folders \ Hidden files and folders. Hit Apply, then OK (or just OK).

8
  • 1
    only thing that sucks about this... it doesn't output anything. No way to verify which files it touched. =( Dec 14, 2011 at 19:38
  • 10
    another thing that sucks, is that it you have to do it manually every time you get such files. Nov 29, 2014 at 16:07
  • 3
    my Users folder is ever so grateful
    – Mikey
    Feb 19, 2016 at 16:06
  • 3
    Beware: on Windows files CreateFile calls with CREATE_ALWAYS but without explicitly specified FILE_ATTRIBUTE_HIDDEN flag, operations will fail on hidden files. Some tools are aware about this, but with some (sorry, don't remember exactly what I had issues with) this happens silently and the only noticeable problem is that configs or logs are somehow not updated. Check e.g. here for more details: stackoverflow.com/a/13215998/116546
    – drdaeman
    Dec 29, 2017 at 17:42
  • This is causing error in my development process. After doing this I am not able to properly use yarn Error: EPERM: operation not permitted, open 'C:\Users\raksh\.yarnrc' Feb 28, 2022 at 13:11
12

Simple:

In Windows Explorer

  1. Right click on the .folder you want to hide;
  2. Click properties, then click on the general tab;
  3. Click on hidden.

Done.

PS Only checked on Windows 7 Professional. PPS I noticed your question asked for doing this automatically. Clearly this won't cut it, but maybe readers find it useful.

2
  • way better solution to hide folders and files in user folder, you can always revert this, and also see the files if you need just by pressing together ctrl+h Oct 28, 2021 at 13:34
  • Doesn't work on files in OneDrive mounts. Jun 28, 2022 at 16:22
6

It is possible in C#, using System.IO.FileSystemWatcher. Code would be something like this. Just compile it and place it in the Start Up folder. But this code doesnt hide already existing files. So run first the code from Luke, and than this code. You need the System.IO and System.Security.Permissions

    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
    public static void Run()
    {
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = "C:\\";
        watcher.IncludeSubdirectories = true;
        watcher.Filter = "*.*";
        watcher.Renamed += new RenamedEventHandler(OnRenamed);
        watcher.Created += new FileSystemEventHandler(watcher_Created);
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        watcher.EnableRaisingEvents = true;
        Console.WriteLine("Started...");
        while (true) ;
    }
    static void Check(string filename)
    {
        string name = Path.GetFileName(filename);
        if (name.StartsWith(".") && !File.GetAttributes(filename).HasFlag(FileAttributes.Hidden))
        {
            File.SetAttributes(filename, File.GetAttributes(filename) | FileAttributes.Hidden);
        }
    }
    static void watcher_Created(object sender, FileSystemEventArgs e)
    {
        Check(e.FullPath);
    }
    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        Check(e.FullPath);
    }
}
3

Windows will hide files with the hidden or system flag. Or files may be hidden using ACL. Windows does not hide files based on filename.

To explicitly have Windows to hide files by filename, you'll need to explicitly create the feature. Either a file system driver (it use to be common for viruses to have this "feature") or a shell extension hack will work in this case.

On a side note, you can fake the feature by turning off "view file extensions" under Folder Options, since, to Explorer, a file that starts with a dot is a file with an extension, but no name.

3
  • 2
    Windows does not have an option to hide all file extensions. This is the only related option: Folder Options > View > [ ] Hide extensions for known file types.
    – iglvzx
    Dec 4, 2011 at 7:20
  • Like I said, not a real feature.
    – surfasb
    Dec 4, 2011 at 7:34
  • 1
    Hiding extensions for known file types doesn't seem to actually hide such files though. I still see them listed in explorer, just with a blank name. It also doesn't appear to affect folders at all (eg. ".txt" is still displayed in full). Windows 7.
    – sqweek
    May 24, 2016 at 4:16
2

I wrote this powershell function which I placed in my powershell profile file so that whenever I start a new powershell session, the function is readily available.

function hide-dots {
    param([string]$path=".")

    if ($path -eq ".") {
        $cwd = (Get-Location).Path.Substring((Get-Location).Path.LastIndexOf("\") + 1)
        echo "Searching for files in $($cwd) ..."
    }
    else {
        echo "Searching for files in $($path) ..."
    }

    $Activity = "Hidding Dot Files."
    $isDotFile = {$_.name -match "^\..*"}
    $isNotHidden = {$_.attributes -match 'Hidden' -eq $false}
    $dotFileCount = 0
    $markedCount = 0

    Get-ChildItem $path -Recurse -Force -ErrorAction SilentlyContinue |
        where $isDotFile |
        where $isNotHidden |
        foreach {
            $path = $_.FullName
            $dotFileCount++

            Write-Progress `
                -Activity $Activity `
                -Status "Found $($dotFileCount) dot files."

            if ([System.IO.File]::Exists($path)) {
                Set-ItemProperty `
                    -name Attributes `
                    -value ([System.IO.FileAttributes]::Hidden) `
                    -path $path

                $markedCount++
            }   
        }


    echo "Marked $($markedCount) dot file(s) as hidden."
}

If not given a specified path it will recursively search for all dot files in the current directory and set the attribute of the file or folder as hidden.

1

I don't think there's a way to make it happen automatically, but you could try using the ATTRIB command to hide those files:

ATTRIB +H

Then make sure that you've configured Explorer to not show hidden files.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .