2011-05-23 23 views
5

¿Hay alguna manera de hacer la negación en cmd o powershell? En otras palabras, lo que quiero es encontrar todos los archivos que no cumplan ciertos criterios (aparte del atributo donde la negación se especifica como "-") decir en el nombre. Sería útil si hubiera una negación genérica que también podría usarse en otros contextos. Además, para Powershell, ¿hay alguna forma de obtener la lista de nombres de archivos y luego almacenarla como una matriz que se puede ordenar, etc.?Negación en cmd y powershell

Disculpas por preguntar algo que parece tan básico.

Respuesta

5

Con PowerShell hay muchas maneras de negar un conjunto de criterios, pero la mejor manera depende de la situación. Usar un único método de negación en cada situación puede ser muy ineficiente a veces. Si usted quiere devolver todos los artículos que no eran mayores de DLL 05/01/2011, podría ejecutar:

#This will collect the files/directories to negate 
$NotWanted = Get-ChildItem *.dll| Where-Object {$_.CreationTime -lt '05/01/2011'} 
#This will negate the collection of items 
Get-ChildItem | Where-Object {$NotWanted -notcontains $_} 

Esto podría ser muy ineficiente, ya que cada elemento que pasa a través de la tubería será comparado con otro conjunto de elementos . Una manera más eficiente para obtener el mismo resultado sería hacer:

Get-ChildItem | 
    Where-Object {($_.Name -notlike *.dll) -or ($_.CreationTime -ge '05/01/2011')} 

Como @riknik Dicho esto, echa un vistazo a:

get-help about_operators 
get-help about_comparison_operators 

Además, muchos cmdlets tienen un parámetro "Excluir".

# This returns items that do not begin with "old" 
Get-ChildItem -Exclude Old* 

para almacenar los resultados en una matriz que se puede ordenar, filtrar, reutilización, etc .:

# Wrapping the command in "@()" ensures that an array is returned 
# in the event that only one item is returned. 
$NotOld = @(Get-ChildItem -Exclude Old*) 

# Sort by name 
$NotOld| Sort-Object 
# Sort by LastWriteTime 
$NotOld| Sort-Object LastWriteTime 

# Index into the array 
$NotOld[0] 
3

No estoy seguro de que entiendo completamente lo que está buscando. Tal vez algo como esto (en PowerShell)?

get-childitem | where-object { $_.name -notlike "test*" } 

Obtiene todos los archivos en el directorio actual, donde sus nombres no comienzan con la prueba de frase.

Para obtener más información sobre los operadores, utilice una función de ayuda de PowerShell:

get-help about_operators 
get-help about_comparison_operators 
+0

Funciona muy bien, gracias. – soandos