2017-03-08 2 views
0

Ich habe eine CSV mit einer Liste von Dateinamen, die ich mit Get-ChildItem erstellt. Jetzt möchte ich diese Liste nehmen und eine Liste der Elemente mit Dateinamen erstellen, die bestimmte Zeichen enthalten (“|", <, etc ...)PowerShell: Filter Liste von Dateinamen mit Liste von verbotenen Zeichen

ich das folgende Skript geschrieben, die gut funktioniert, außer ich ist nicht in der Lage Datei mit einem? im Dateinamen zu filtern. ich habe auch ich ein wenig saubere und einfacher machen möchte. Irgendwelche Ideen?

$csv = Import-Csv .\FILES.CSV 

$csvexport = $null 

$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*'*"}) 
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*%*"}) 
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*|*"}) 
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*#*"}) 
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*:*"}) 
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*<*"}) 
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*>*"}) 

$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*/*"}) 
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*\*"}) 

$csvexport | export-csv .\filesupdated.csv -NoTypeInformation -NoClobber 
+1

Bitte bearbeiten Sie Ihre Frage, damit der Code korrekt formatiert ist. –

+0

@Bill_Stewart: Fertig! War nicht klar, dass das Hash-Zeichen es fett machen würde. Vielen Dank – Jonathan

Antwort

2

Verwenden sie einen RegEx (kurz für Regular Expression) Spiel statt Der Vergleichsoperator -like Im Folgenden wird versucht, alle von Ihnen aufgelisteten Zeichen sowie das Fragezeichen und das doppelte Anführungszeichen zu finden. Der vorangehende umgekehrte Schrägstrich ist ein Escape-Zeichen, to stelle sicher, dass es sich um eine wörtliche Übereinstimmung handelt, und die Pipe zwischen jedem Zeichen bedeutet "oder", so dass nach einem der Zeichen gesucht wird.

$csv = Import-Csv .\FILES.CSV 

$csvexport = $null 

$csvExport = $csv | select name,length |Where-Object {$_.name -match "\`"|\'|\%|\||\#|\:|\<|\>|\/|\\|\?"} 

$csvexport | export-csv .\filesupdated.csv -NoTypeInformation -NoClobber 

Einige der Charaktere müssen nicht entgangen sein, aber es gibt keinen Schaden (die ich kenne) ein Zeichen, selbst wenn sie es braucht nicht entkommen, wenn Sie es versuchen, zu verwenden der Zweck eines besonderen Charakters, was wir nicht sind.

Verwandte Themen