Скрытие файлов / папок, которые начинаются с полной остановки (точка)

Windows не использует соглашение о точечных файлах для скрытых файлов. Однако многие приложения Windows (в основном с открытым исходным кодом / кросс-платформенные) используют файлы и папки с этим соглашением. Как я могу заставить Windows Explorer автоматически скрывать эти точечные файлы?

5 ответов

Решение

ATTRIB +H /s /d C:\.* команда, которая скрывает что-либо, включая каталоги, начинающиеся с точки

Это не будет перечислять файлы (как указано ниже), но будет попадать в каждый файл, к которому он имеет доступ, и применять атрибут Hidden.

Как только это будет сделано, вы можете убедиться, что в настройках Папки скрыты скрытые файлы. Нажмите на Пуск, введите folder options и нажмите Enter. Нажмите на вкладку " Вид ", затем выберите " Не показывать скрытые файлы, папки или диски" в папке " Файлы и папки" \ " Скрытые файлы и папки". Нажмите Apply, затем OK (или просто OK).

Просто:

В проводнике Windows

  1. Щелкните правой кнопкой мыши на .folder ты хочешь спрятаться;
  2. Нажмите propertiesзатем нажмите на general вкладка;
  3. Нажмите на hidden,

Готово.

PS Проверено только на Windows 7 Professional. PPS Я заметил ваш вопрос, заданный для этого автоматически. Очевидно, что это не поможет, но, возможно, читатели найдут это полезным.

Это возможно в C#, используя System.IO.FileSystemWatcher. Код будет что-то вроде этого. Просто скомпилируйте его и поместите в папку "Автозагрузка". Но этот код не скрывает уже существующие файлы. Так что сначала запустите код от Люка, а потом этот код. Вам нужны System.IO и 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);
    }
}

Windows будет скрывать файлы со скрытым или системным флагом. Или файлы могут быть скрыты с помощью ACL. Windows не скрывает файлы по имени файла.

Чтобы Windows явно скрывала файлы по имени файла, вам нужно явно создать эту функцию. В этом случае будет работать либо драйвер файловой системы (для вирусов это характерно), либо взлом расширения оболочки.

Кстати, вы можете подделать эту функцию, отключив "Просмотр расширений файлов" в разделе "Параметры папки", поскольку для Проводника файл, начинающийся с точки, - это файл с расширением, но без имени.

Я написал эту функцию PowerShell, которую я поместил в свой файл профиля PowerShell, чтобы при запуске нового сеанса PowerShell эта функция была легко доступна.

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."
}

Если не указан указанный путь, он будет рекурсивно искать все точечные файлы в текущем каталоге и устанавливать атрибут файла или папки как скрытый.

Я не думаю, что есть способ сделать это автоматически, но вы можете попробовать использовать команду ATTRIB, чтобы скрыть эти файлы:

ATTRIB + H

Затем убедитесь, что вы настроили Explorer, чтобы не показывать скрытые файлы.

Другие вопросы по тегам