Jump to content

Zeilen in PowerShell ersetzen


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Guten Morgen!

Wie gesagt, hier nochmals mein recht herzlichen Dank für die Lösung meines Problems! Habe gestern Abend noch versucht, zwei weitere für mich hilfreiche "Replacec" in dein programmiertes Skript zu schreiben, wobei ich allerdings kläglich gescheitert bin und die von Dir angesprochenen Frustrationen auslösten:cry3:

Den Rat mit den Video-Anleitungen über PowerShell nehme ich auf jeden Fall an und werde mich dahingehend weiterbilden.

Falls jemand einem momentan noch in Sachen PowerShell überforderten Lehrer unter die Arme greifen möchte und die Ernte ein paar dankbare Schüler wären hier die zwei Replacec ;-)

$_ -replace "SetApproachStrategy(true, false, -1)","SetApproachStrategy(false, true, 2)
$_ -replace "SetRetractStrategy(true, false, -1, 0)","SetRetractStrategy(false, true, 2, 0)

Danach werde ich selber versuchen, dieses Skript in das vom CAD-Hersteller bereitgestellte Skript einzubauen, in der Hoffnung, dass ich das hin bekomme;-)

Link zu diesem Kommentar

Habe den Code der Einfachheit halber und meiner möglichen Verständnissen  wieder etwas vereinfacht und die zwei gewünschten "Replacec" ergänzt, welche nun auch funktionieren (hat zu kleinen Erfolgserlebnissen geführt;-) ).. Die von BofH_666 geschriebene und bis dato funktionierende Ergänzung funktioniert jetzt leider nicht mehr. Poste den Code mal in der Hoffnung, dass jemand Abhilfe leisten kann.

$original_file = 'C:\Users\theo_\Documents\Seite_Rechts_2_1.xcs'
$destination_file =  'C:\Users\theo_\Documents\Seite_Rechts_2_1.xcs'
(Get-Content $original_file) | Foreach-Object {
    $_ -replace "SetWorkpieceSetupPosition\(0.0000, 0.0000, 0.0, 0.0\)","SetWorkpieceSetupPosition(5.0000, 5.0000, 0.0, 0.0)"
        } | Set-Content $destination_file

(Get-Content $original_file) | Foreach-Object {
    $_ -replace "SetApproachStrategy\(true, false, -1\)","SetApproachStrategy(false, true, 2)"
    } | Set-Content $destination_file

(Get-Content $original_file) | Foreach-Object {
    $_ -replace "SetRetractStrategy\(true, false, -1, 0\)","SetRetractStrategy(false, true, 2, 0)"
    } | Set-Content $destination_file

$Ergaenzung = @'
CreateNullOperation("Wegfahrschritt", 2000.0000, 0.0000, 1);
ResetPneumaticHood();
ResetApproachStrategy();
ResetRetractStrategy(); 
'@

$ReplacedContent[0..($ReplacedContent.Length - 6)] + 
    $Ergaenzung + 
    $ReplacedContent[($ReplacedContent.Length - 5)..($ReplacedContent.Length)] | 
        Set-Content -Path $destination_file -Force

 

Link zu diesem Kommentar

Warum nimmst Du nicht einfach meinen Code und versuchst zu verstehen, was er tut? Du führst z.B. mehr oder weniger die gleiche Schleife 3 mal aus, nimmst dafür aber jedes mal die Original-Datei als Grundlage und schreibst jedes mal die Ziel-Datei neu. Das dürfte eigentlich nicht funktionieren.

Es wäre effizienter, alle Änderungen in einer Schleife nacheinander durchzuführen.

Ich schreibe in meinem Script die Änderungen mit dem Parameter -OutVariable erst mal temporär in eine Variable. Diese benutze ich dann zum Schluss dazu, dieErgänzung einzufügen. Da Du die Variable nicht benutzt, kann es so nicht funktionieren. Lies einfach Dein Destination-File nochaml mittels Get-Content ein und füge die Ergänzung auf die gleiche Weise wie ich hinzu.

 

Weißt Du was ein Help-Vampire ist?  ;-)

 

Ich will ja nicht dran Schuld sein, wenn sich jemand die Pulsadern eröffnet ....  :aha2:

 

Um meinen Code-Vorschlag quick & dirty um die letzten beiden zusätzlichen Ersetzungen zu erweitern, musst Du nur eine einzige Zeile ändern ... und zwar das hier

else {
    $_
}

 ....  in das hier ...

else {
    $_.Replace("SetApproachStrategy(true, false, -1)", "SetApproachStrategy(false, true, 2)").Replace("SetRetractStrategy(true, false, -1, 0)", "SetRetractStrategy(false, true, 2, 0)")
}

... noch als Erklärung: Der -replace Operator arbeitet mit regulären Ausdrücken. Die String-Methode .Replace() dagegen arbeitet mit direkten String-Ersetzungen. Der zu ersetzende String muss also genau so aussehen, wie in der Methode angegeben.

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...