2016-11-07 2 views
2

Ich habe ein Problem, dass ich nicht ganz gleich auflösen kann, die Art, wie ich es bin Einwickeln. Ich füge meinen neuesten Code ein, der mir nicht das gewünschte Ergebnis und den Code für eine Lösung gibt, die funktioniert, aber für jeweils nur eine Datei. Ich kann jedoch nicht herausfinden, wie ich jede Datei automatisch durchlaufen kann.Get-ChildItem Null Ergebnisse Output

Kurz gesagt, ich habe ein Verzeichnis mit vielen CSV Dateien einige der Einträge in der CSV Datei haben einen negativen Wert (-) Ich muss dieses Minuszeichen in allen Instanzen entfernen.

Nun, was funktioniert, ist, wenn ich folgendes (auf einer einzigen Datei)

$content = Get-Content "L:\Controls\BCR\0001cash.csv" | ForEach {$_ -replace $variable, ""} | Set-Content "L:\controls\bcr\0001temp.csv" 

Was ich tue, ich versuche, verwenden, um durch die vielen tausend dieser Objekte durchlaufen wird automatisch und nicht individuell auf sie zu beziehen haben .

Ich begann mit:

$Directory = "L:\Controls\BCR\" 
$variable = "-" 
$suffix = ".tmp" 

das Verzeichnis zu definieren, Minuszeichen, die ich will entfernen und das Suffix der Datei ich ändern wollen ...

$Files = Get-ChildItem $Directory | Where-Object {$_.Extension -like "*csv*"} | Where-Object {$_.Name -like "*cash*"} 

ist der Erhalt jede der Dateien, die ich möchte arbeiten mit

Und ich bin dann mit

Arbeits

Die Ergebnisse sind jedoch nichts ...

Auf Verlust? Jemand???

$Directory = "L:\Controls\BCR\" 
$variable = "-" 
$suffix = ".tmp" 


$Files = Get-ChildItem $Directory | Where-Object {$_.Extension -like "*csv*"} | Where-Object {$_.Name -like "*cash*"} 

$process = ForEach ($File in $Files) { Get-Content $Files | ForEach {$_ -replace $variable, ""} | Set-Content {$_.BaseName + $suffix} 



} 
+0

Hallo, 'Set-Content' schreibt Inhalt *** in *** die Datei. 'Rename-Item' würde es umbenennen. – sodawillow

Antwort

1

Sie verwenden die falsche Variable im Get-Content Cmdlets ($Files statt $File). Außerdem können Sie Ihr Skript vereinfachen:

$Directory = "L:\Controls\BCR\" 
$variable = "-" 
$suffix = ".tmp" 
Get-ChildItem $Directory -Filter '*cash*csv' | 
    ForEach-Object { 
     (Get-Content $_ -Raw) -replace $variable | 
      Set-Content {$_.BaseName + $suffix} 
    } 
+0

Hey Martin danke für deine Antwort viel sauberer als das was ich geschrieben habe, ich habe mir etwas Zeit genommen um das -Raw was ich noch nicht gesehen habe und die Aufnahme von zwei Begriffen innerhalb des Filters zu kennen, von denen ich wieder einmal nicht so viel gewusst habe Hier! Ihre Lösung führte mich zu einer eleganteren Lösung für das, was ich rein zufällig versuchte. Ich kann dir nicht genug danken! Ich habe irgendwann gebraucht. –

+0

$ Directory = "L: \ Steuerelemente \ BCR \" $ variable = "-" $ suffix = ".tmp" Get-ChildItem $ Verzeichnis -Filter '* cash * csv' | ForEach-Object { (Get-Content $ _ -Raw) -replace $ Variable | Set-Content $ _ -Force } –

+0

Das ist in Ordnung. Bitte schön! –