2015-02-07 2 views
0

Каков правильный способ определения, является ли файл или папка пустым в powershell? Я наткнулся на это post и попробовал пример, который дал второй пользователь, и он сработал.Powershell - правильный способ проверки, если каталог пуст

Теперь, я проверял, если каталог пуст, используя свойство длины, например:

(Get-ChildItem -Path "C:\Users\someUser\Downloads\" -Recurse).Length) 

Однако, что только возвращает количество байт, что файл/папка. Я тестировал свойство length и обнаружил, что если у вас будет пустой текстовый файл/папка, размещенная в загрузках, свойство length не вернет правильное значение.

Можете ли вы использовать свойство length для правильного определения количества файлов/папок, которые есть в каталоге?

+0

Почему вы не используете 'Test-Path "C: \ Users \ someUser \ Downloads \ *"', как предложено в [другой] (http://stackoverflow.com/a/10550670/608772) ответ того же [сообщения] (http://stackoverflow.com/q/10550128/608772). – JPBlanc

+0

Возможный дубликат [Powershell test, если папка пуста] (http://stackoverflow.com/questions/10550128/powershell-test-if-folder-empty) – jpmc26

ответ

1

Попробуйте это, он будет считать количество элементов:

Get-ChildItem -Path "C:\Users\someUser\Downloads\" -Recurse | Measure-Object 
+0

Спасибо, однако, это сработало, почему свойство length дает значение что он делает? Почему он не дает количество файлов/папок в каталоге? –

+1

Потому что, когда вы выполняете вызов get-childitem, свойство length возвращает размер файла. Мой пример плохо форматируется в этом комментарии, но сам вызов get-childitem выполняется сам по себе, и вы увидите столбец длины. Например: PS> Get-ChildItem Каталог: C: \ Users \ Foo \ Desktop Режим LastWriteTime Длина Имя ---- ------------- - ----- ---- d ---- 2013-04-20 9:51 PM 2013-01-22-antlrworks-2.0 –

+0

Еще раз спасибо, я только что протестировал ваш ответ, но мне пришлось его изменить this: (Get-ChildItem -Path "C: \ Users \ somerUser \ Downloads \" -Recurse | Measure-Object) Мне пришлось поместить скобки вокруг команды, чтобы вернуть правильное значение. Зачем? –

1

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

для файла:

If ((Get-Content C:\YouFile.txt) -eq $Null) { 
    "The file is empty" 
} 

, если файл содержит пустое пространство, которое он не возвратит утратившим, так что если вы хотите проверить, даже пустое пространство вы можете использовать следующее:

If ([string]::IsNullOrWhiteSpace((Get-Content C:\YourFile.txt))) { 
    "The file is empty" 
} 

для папки:

If ((Get-ChildItem -Force C:\SomeFolder) -eq $Null) { 
    "the Folder is empty" 
} 
+0

В примере вашей папки не рассматриваются элементы со скрытым атрибутом. – jscott

+0

Теперь он делает ... :) –

0

Другой способ справиться с этим просто использовать статический метод базового в System.Io.Directory - Directory.EnumerationFileSystemInfos() и посмотреть, как много объектов, если таковые имеются, возвращаются , Обратите внимание, что FileSystemInfo может быть либо каталогом, либо файлом, поэтому он будет работать в вашем случае.

[system.io.directory]::EnumerateFileSystemEntries("C:\temp") 
Смежные вопросы