Jump to content
wethlo

Zeilen in PowerShell ersetzen

Recommended Posts

vor 32 Minuten schrieb daabm:

Du lügst doch... Du kannst gar nicht anders :-)

... nu gönn' mir doch auch mal meinen Spaß!!  :D:shock2::aetsch2:

Share this post


Link to post
Share on other sites

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;-)

Share this post


Link to post
Share on other sites

Am Ende fehlen schon mal die schliessenden Hochkommas.

Und du musst die Klammern escapen, sprich mit \ "entwerten".

Schau die mal Replace aus dem Skript an, die funktionieren. Dann verstehst du was ich meine.

Edited by tesso

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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.

Edited by BOfH_666

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Werbepartner:



×
×
  • Create New...