item full ejemplos content childitem powershell get-childitem

full - powershell foreach



¿Cómo se puede probar Get-ChildItem sin resultados(cero archivos)? (5)

Cuando no hay archivos, $ Files es igual a $ null, por lo que EBGreen sugiere que debería probar contra $ null. Además, $ Files.Count solo es útil cuando el resultado es una colección de archivos. Si el resultado es un escalar (un objeto) no tendrá una propiedad de conteo y la comparación fallará.

Consejo de rendimiento: cuando necesite buscar solo un tipo de extensión, use el parámetro -Filter (en lugar de -Include) ya que se está filtrando en el nivel de proveedor.

Estoy sorprendido de lo que parece ser un problema simple; Lo siento mucho por cualquier cabeza con cabeza por aquí.

Tengo un script que limpia los archivos de copia de seguridad difuntos. Después de identificar los archivos, vuelvo e imprimo lo que se está volcando. Mi problema surge al tratar de proporcionar retroalimentación / prueba cuando no hay archivos obsoletos. El guión se parece a ...

$Files = Get-ChildItem $BackupPath_Root -include *.bak -recurse | where {$_.CreationTime -le $DelDate_Backup } if ( $Files -eq "" -or $Files.Count -eq 0 ) { write-host " no files to delete." #<-- this doesn''t print when no files } else { foreach ($File in $Files) { write-host “$File” Remove-Item $File | out-null } }

El si se comprueba si no hay archivos no detecta la condición de no archivo. ¿Cuál es la manera apropiada de probar $Files para no obtener resultados?


Especificar el tipo [bool] delante de un comando get-childitem devolverá True si se encuentra algo, o false si no se encuentra nada. Esto es lo que está haciendo la respuesta de Emiliano, pero sin el requisito negativo. Puedes hacer que cualquiera de los dos funcione, pero prefiero [bool] con algunas de las sentencias condicionales más complejas solo para que sea más fácil de seguir.

[bool](Get-ChildItem C:/foo.txt)

Utilizado en una declaración If

if ([bool](Get-ChildItem C:/foo.txt)) {write-output "foo.txt exists"}


Intenta envolver en @(..) . Crea siempre una matriz:

$Files = @(Get-ChildItem $BackupPath_Root -include *.bak -recurse | where {$_.CreationTime -le $DelDate_Backup }) if ($Files.length -eq 0) { write-host " no files to delete." } else { .. }


La variable se convierte en una expresión de valor nulo cuando la carpeta escaneada está vacía. Puedes usar:

if (!$Files) { # ... }


Trate de probar para $ archivos -eq $ null también.