2016-03-21 14 views
-1

Ich bin mit einem seltsamen Problem mit meinem Skript konfrontiert.Power-Shell-Befehl wählt 2 Dateien statt nur eine

Ich habe 2 Dateien: OBTM_OUTCOME_GFM_20150519164709_1.end und OBTM_OUTCOME_GFM_20150818142145_11.end

Ich bin suppose nur die Datei mit dem minimalen Minkey zu holen, wo Minkey die Ziffern nach dem letzten Unterstrich sind. Für die erste Datei ist MinKey 1, für den zweiten MinKey ist 11.

S3PathName ist der S3-Bucket und es ist das gleiche für beide der Datei. InputBaseFileName = OBTM_OUTCOME_GFM, und Minkey gefunden wurde und es ist 1.

Wenn ich den folgenden Befehl gesetzt, bekomme ich die beiden Dateien, während ich in der ersten nur interessiert bin:

Get-S3Object -BucketName $S3BucketName -KeyPrefix $S3PathName | 
Where-Object {$_.Key -Like "$S3PathName/$InputBaseName*$MinKey.*"}..... 

Ist es möglich, dass das asterisk nicht funktioniert, wie ich denke, sollte es? Danke

+0

Wie definieren Sie $ Minkey? – dfundako

+2

'-Like" $ S3PathName/$ InputBaseName * _ $ MinKey. * "' – PetSerAl

+0

Danke @PetSerAl! Das hat es tatsächlich gelöst :) – user2518751

Antwort

1

PetSerAls Lösung ist korrekt, die * erlaubt eine beliebige Anzahl von Zeichen (einschließlich 0).

Wenn Sie alles außer dem Ende trimmen:

_1.end _11.end

und wenden Sie die Abfrage $_ -like *1.end es beide Dateien zurückgeben, weil * bedeuten beide „_“ und „_1 ".

Durch Hinzufügen der _ zu der Abfrage: $_ -like *_1.end Sie sicherstellen, dass Sie nur nach einer vollständigen Übereinstimmung nach dem _ überprüfen, anstatt zusätzliche Zeichen zuzulassen.

Substitute "1" mit `$ Minkey und in den Rest hinzu:

Where-Object {$_.Key -Like "$S3PathName/$InputBaseName*_$MinKey.*"} 
Verwandte Themen