Jump to content

wethlo

Members
  • Gesamte Inhalte

    20
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von wethlo

  1. Das Skript sucht ja unter C:\CADLINE\_Einzelteile die neueste .xlsm-Datei und aktiviert das darin enthaltene Makro. Ich vermute, dass dieses Feature für .emf-Dateien noch nicht implementiert ist… Prinzipiell soll das genauso gehen wie mit den Excel-Dateien. Den Ordner suchen, in denen die neuesten emf-Dateien drin sind und gut ist…
  2. Jetzt muss ich doch nochmals nachhaken. Mir ist eben noch ein kleiner Bug aufgefallen. Es wird, wenn ein neuer Ordner erstellt wurde die aktuellste Excel-Datei gesucht und die csv-Datei dann exportiert. Leider nimmt er jedoch für die Funktion der Konvertierung von emf ins bmp-Format nicht den gleichen Ordner. Er nimmt den letzten Ordner, in dem die Dateien abgespeichert wurden. Hat hierfür vielleicht jemand eine Lösung?
  3. Vielen lieben Dank für deine Hilfestellung! Mit deiner finalen Änderung läuft nun alles hervorragend durch. Habe noch aus den Einstellungen von IrfanView zwei Einstellungen hinzugefügt, um die EMF's in schwarz-weiße BMP's umzuwandeln. Der Finale Code schaut nun folgendermaßen aus: $Excel = New-Object -Comobject Excel.Application $Excel.Visible = $true $Dir = 'C:\CADLINE\_Einzelteile' $Filepath = (Get-ChildItem $Dir -recurse | Where-Object name -like "*xlsm" | Sort-Object LastWriteTime -Descending)[0] $Workbook = $Excel.Workbooks.Open($Filepath.FullName) $Excel.Run("MCStudioExport") $Excel.ActiveWorkbook.Save() $Workbook.Close() $excel.Quit() & 'C:\Programme\IrfanView\i_view64.exe' "$($FilePath.Directory.FullName)\*.emf" /gray /bpp=1 /convert="$($FilePath.Directory.FullName)\*.bmp" [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) Remove-Variable -Name excel
  4. Das mit dem Punkt (.) vorneweg hatte hat leider kein Erfolg. Habe es dann mit C:\Program Files\IrfanView\i_view64_exe versucht (habe den Pfad als Text kopiert), was auch nicht funktionierte. Mit C:\Programme\IrfanView\i_view64_exe hatte ich dann Erfolg. Das Script lief ohne Fehlermeldung durch. Voller Vorfreude habe ich dann in den Ordner geschaut, in dem die Files als bmp abgespeichert werden sollten: Leider keine bmp-Files. Habe dann mal versucht, eine bestimmte immer Ordner angegebene emf-Datei zu konvertieren: Das hat funktioniert. Heißt, da ist leider noch irgend etwas faul
  5. Habe eben versucht die von BOfH_666 genannte Zeile in das Script einzubauen. Schaut nun wie folgt aus: $Excel = New-Object -Comobject Excel.Application $Excel.Visible = $true $Dir = "C:\CADLINE\_Einzelteile" $Filepath = ((gci $Dir -recurse | where name -like "*xlsm" | sort LastWriteTime -Descending)[0]).FullName $Workbook = $Excel.Workbooks.Open($Filepath) $Excel.Run("MCStudioExport") $Excel.ActiveWorkbook.Save() $Workbook.Close() $excel.Quit() Set-Location "C:\Program Files\IrfanView" i_view64.exe "$($FilePath.Directory.FullName)*.emf" /convert="$($FilePath.Directory.FullName)*.bmp" [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) Remove-Variable -Name excel Leider spuckt mir die Konsole den Fehler "die Benennung "i_view64.exe" wurde nicht als Name eines Cmlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen sie den Vorgang. Der Pfad ist definitiv richtig... An was könnte das liegen?
  6. Das schöne an dem Etikettierdrucker ist, dass er die Etiketten selbstständig druckt und auf der zu verschachtelnden Platte selbst positioniert Vielen Dank für die Hilfeleistung. Werde ich versuchen in das Script einzubauen und die Kommandozeilenargumente suche ich mir natürlich in der Hilfe!
  7. Ich versuche es mal in kurze Worte zu fassen für was ich das benötige: Wir exportieren aus unserer CAD-Software fertige CNC-Programme. Zusätzlich wird automatisch von jedem zu exportierenden Teil ein EMF-Bild in den selben Ordner mit selbem Namen gespeichert. Dieses EMF-Bild benötige ich für die im Nachgang erstellten Nesting-Programme. Hier werden viele Einzelteile aus einer kompletten Platte herausgenestet. Jedes Teil bekommt ein Label. Auf dieses Label kommt das besagte Bild. Allerdings geht dies nicht im EMF-Format sondern vorzugsweise im BMP-Format. Mit nachfolgendem Skript wird zusätzlich noch ein Makro in einer Excel-Datei ausgelöst (der Einfachheit halber wird nach der aktuellsten Excel-Datei in einem Verzeichnis gesucht), welches mir eine CSV-Datei exportiert, welche ich für den selben Prozess benötige. Diesem Script sollte nun das Konvertieren der EMF-Files (können 1 bis unendlich viele sein) in BMP-Files hinzugefügt werden. Die EMF-Dateien sind dann auch im selben Verzeichnis wie die Excel-Datei. Habe mir IrfanView heruntergeladen und mal manuell versucht, die Einzelbilder umzuwandeln, was sehr gut funktioniert hat. Habe allerdings die Einstellung auf Schwarz/Weiß gestellt, damit die Dateigröße nicht exorbitant groß wird. Der Etikettendrucker kann sowieso nur S/W. Könnte man dem Skript das Umwandeln hinzufügen oder ist das utopisch? Da ich Schreinermeister und Lehrer für CAD/CNC-Technik bin, habe ich hiervon leider nicht viel bis keine Ahnung und dachte, dass mir hier jemand helfen könnte. Der ganze Prozess bildet im Prinzip einen kompletten digitalen Workflow einer modernen Schreinerei ab. Anbei das bisher funktionierende Script, welches das Makro in der aktuellsten Excel-Datei aus dem Verzeichnis auslöst: $Excel = New-Object -Comobject Excel.Application $Excel.Visible = $true $Dir = "C:\CADLINE\_Einzelteile" $Filepath = ((gci $Dir -recurse | where name -like "*xlsm" | sort LastWriteTime -Descending)[0]).FullName $Workbook = $Excel.Workbooks.Open($Filepath) $Excel.Run("MCStudioExport") $Excel.ActiveWorkbook.Save() $Workbook.Close() $excel.Quit() [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) Remove-Variable -Name excel
  8. Wie in meiner ersten Frage schon erläutert ist das Bildformat EMF für die Software von unserem Etikettendrucker nicht verwendbar. Ich habe die Software nun soweit optimiert, dass ich die zweite Datei mit der Erweiterung (180) nicht mehr benötige, da ein Bild im BMP-Format um 180° gedreht werden kann. Was allerdings notwendig ist, wäre das Konvertieren von mehreren EMF-Files in das zu favorisierende BMP-Format... Der Dateiname kann/soll gleich bleiben.
  9. Ja hab es versucht... Leider kommt folgende Antwort: Der Typ [ImageFormat] wurde nicht gefunden. In C:\Users\wethlo_\Desktop\umwandeln.ps1:6 Zeichen:5 + [ImageFormat] + ~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (ImageFormat:TypeName) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound Der Code sieht nun so aus: function ConvertTo-Image { [CmdletBinding()] param( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true)] $Files, [ImageFormat] [Parameter(Mandatory = $true, Position = 1)] $Format ) begin { Write-Verbose "Conversion start" } process { function Get-ImageFormat { param ($format) switch ($format) { "MemoryBMP" { [System.Drawing.Imaging.ImageFormat]::MemoryBMP } "Bmp" { [System.Drawing.Imaging.ImageFormat]::Bmp } "Emf" { [System.Drawing.Imaging.ImageFormat]::Emf } "Wmf" { [System.Drawing.Imaging.ImageFormat]::Wmf } "Jpeg" { [System.Drawing.Imaging.ImageFormat]::Jpeg } "Png" { [System.Drawing.Imaging.ImageFormat]::Png } "Gif" { [System.Drawing.Imaging.ImageFormat]::Gif } "Tiff" { [System.Drawing.Imaging.ImageFormat]::Tiff } "Exif" { [System.Drawing.Imaging.ImageFormat]::Exif } "Icon" { [System.Drawing.Imaging.ImageFormat]::Icon } Default { } } } $formatType = Get-ImageFormat $Format $fullName = $input.FullName $image = [System.Drawing.Image]::FromFile($fullName); $filePath = [IO.Path]::ChangeExtension($fullName, ".$($formatType.ToString().ToLower())"); $image.Save($filePath, $formatType); $image.Dispose(); } end { Write-Verbose "Conversion done" } } $ordner = "C:\Users\wethlo_\Desktop\Test" Get-ChildItem -Path $ordner -Filter "*.emf" | ConvertTo-Image -Format Jpeg
  10. Guten Abend! Vielen Dank für den Tipp! Werde ich mir anschauen. Bin allerdings im Netz noch auf nachfolgenden Code gestoßen... Kann mir jemand sagen, wie ich wo den Pfad des Ordners angeben kann, in dem die EMF-Dateien gespeichert sind? So wie ich den Code interpretiere, kann dieser genau das, was ich benötige: Und zwar EMF-Dateien in Jpeg umwandeln... enum ImageFormat { MemoryBMP; Bmp ; Emf; Wmf; Jpeg; Png; Gif; Tiff; Exif; PhotoCD; Icon } function ConvertTo-Image { <# .SYNOPSIS Converts input to an image .DESCRIPTION Converts input file to an image. Supported output types: MemoryBMP, Bmp , Emf, Wmf, Jpeg, Png, Gif, Tiff, Exif, PhotoCD, Icon .PARAMETER Files Input files .PARAMETER Format Output Image format type .EXAMPLE Get-ChildItem C:\test -Filter "*.gif" | ConvertTo-Image -Format Png Converts all gif animations from location 'C:\test' into png files #> [CmdletBinding()] param( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true)] $Files, [ImageFormat] [Parameter(Mandatory = $true, Position = 1)] $Format ) begin { Write-Verbose "Conversion start" } process { function Get-ImageFormat { param ($format) switch ($format) { "MemoryBMP" { [System.Drawing.Imaging.ImageFormat]::MemoryBMP } "Bmp" { [System.Drawing.Imaging.ImageFormat]::Bmp } "Emf" { [System.Drawing.Imaging.ImageFormat]::Emf } "Wmf" { [System.Drawing.Imaging.ImageFormat]::Wmf } "Jpeg" { [System.Drawing.Imaging.ImageFormat]::Jpeg } "Png" { [System.Drawing.Imaging.ImageFormat]::Png } "Gif" { [System.Drawing.Imaging.ImageFormat]::Gif } "Tiff" { [System.Drawing.Imaging.ImageFormat]::Tiff } "Exif" { [System.Drawing.Imaging.ImageFormat]::Exif } "Icon" { [System.Drawing.Imaging.ImageFormat]::Icon } Default { } } } $formatType = Get-ImageFormat $Format $fullName = $input.FullName $image = [System.Drawing.Image]::FromFile($fullName); $filePath = [IO.Path]::ChangeExtension($fullName, ".$($formatType.ToString().ToLower())"); $image.Save($filePath, $formatType); $image.Dispose(); } end { Write-Verbose "Conversion done" } }
  11. Hallo zusammen! Bin Lehrer für CNC-Technik und habe leider von Powershell etc. leider keine bis fast keine Ahnung. Trotzdem bin ich auf der Suche nach einem Script, welches mir emf-Dateien (Anzahl X) in z.B. jpg umwandelt (wenn die Transparenz der Bilddatei verloren geht ist das egal). Die Traumvorstellung zusätzlich wäre, dass dann diese jpg-Datei automatisch um 180 Grad gedreht wird und mit einer Erweiterung des Dateinamens (z.B. (180)) im selben Ordner abgespeichert wird. Geht so etwas grundsätzlich oder muss ich mich hier anders helfen?
  12. 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
  13. 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 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
  14. Genial, es funktioniert alles so wie es sein sollte Das mit dem Extra-Dreh wäre nicht notwendig gewesen, die Werte sind quasi bei jedem Programm so, dass ich 5 in x und y brauche und die zwei beim 5. Argument. Respekt vor deinen Fähigkeiten!!!
  15. Selbstverständlich! Mach ich natürlich gerne! Vielleicht kann ich Dich mal unterstützen ein cnc-Programm zu schreiben;-)
  16. Vielen Dank für deine Bemühungen! Habe mal mit dem geänderten Skript rumprobiert... Wirft mir so leider Fehlermeldungen aus. Ich lade gleich mal eine XCS-Datei (Format, welches unser CAD-Programm ausspuckt) hoch, da kannst du Dir das mal anschauen. Die Dateien sehen quasi am Kopf und Fuß immer gleich aus. Da wird das Werkstück mit der Größe angegeben. Hierbei soll der Ursprung in x und y jeweils um 5 mm verschoben werden. Der String in dem das drin steht sieht immer gleich aus. Die vier Zeilen kurz vor dem Ende bewirken an der CNC, dass der Bumper um 2000 mm nach rechts fährt und das Werkstück wieder vom Tisch genommen werden kann. Diese Einstellungen kann man leider in der Software nicht einstellen. TEST01.txt
  17. Wie gesagt. Es handelt sich um unser CNC-Programm, welches Programme auswirft die mit den beschriebenen Inhalten ergänzt werden müssen. Wusste nicht, dass es sich hier um ein Forum nur für Profis handelt. Nach den vier einzufügenden Zeilen stehen immer die selben Zeilen. Sprich: Wenn diese dort eingefügt werden, wäre es perfekt.
  18. In meinem ersten Post stehen nach den besagten vier Zeilen, die am Schluss eingefügt werden müssen noch fünf weitere Zeilen, die da stehen bleiben müssen, sonst kapiert das CAM-Program die XCS-Datei nicht. Gibt es eine Möglichkeit, immer diese vier zeilen in die fünftletzte Zeile zu setzen? Das Skript funktioniert jetzt, bis darauf, dass jeweils 0.000 und 0.000 nach SetWorkpieceSetupPosition nicht durch 5.000 und 5.000 ersetzt wird. Besten Dank schon mal für deine Bemühungen!
  19. Guten Morgen! Vielen Dank für die schnelle Antwort. Bin wie gesagt noch ein Neuling in Sachen PowerShell, und habe mich mit Hilfe von Google zum Skript durchgeschlungen. Von dem her kann ich Dir die Frage mit den here-strings leider nicht beantworten Habe heute Morgen das Skript ausprobiert. Folgendes ist mir aufgefallen: In der xcs-Datei wird nun jede Zeile doppelt ausgegeben, was nicht Sinn der Sache ist... Was ebenso noch sein sollte: Die Ergänzung sollte nicht ganz ans Ende geschrieben werden, sondern beginnend mit der fünftletzten Zeile. Geht so etwas? Ich hoffe sehr. Es handelt sich um eine Datei, welche aus unserem CAD-Programm umgewurstelt bzw. ergänzt wird und dann CNC-tauglich ist, ohne nochmals das CAM-System zu öffnen. Natürlich werde ich in Zukunft die Skripte als Code formatieren!
  20. Guten Abend! Ich hoffe mir kann hier jemand helfen. Bin ein absoluter Neuling in Sachen PowerShell. Habe ein Skript geschrieben, welches mir Inhalte ersetzen soll. Die oberen zwei "Replaces" funktionieren. Das dritte leider nicht. Am Ende der Datei sollen folgende vier Zeilen CreateNullOperation("Wegfahrschritt", 2000.0000, 0.0000, 1); ResetPneumaticHood(); ResetApproachStrategy(); ResetRetractStrategy(); ergänzt werden. Die PowerShell-Datei sieht folgendermaßen aus: $original_file = 'C:\Desktop\TEST.xcs' $destination_file = 'C:\Desktop\TEST.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 'TypeOfProcess.Drilling, "-1", "-1", 0, -1, -1','TypeOfProcess.Drilling, "-1", "-1", 0, -1, 2' } | Set-Content $destination_file (Get-Content $original_file) | Foreach-Object { $_ -replace @" try { CreateMacro("PYTHA_PARK_2", "PYTHA_PARK"); } catch (System.Exception e) { } "@ , @" CreateNullOperation("Wegfahrschritt", 2000.0000, 0.0000, 1); ResetPneumaticHood(); ResetApproachStrategy(); ResetRetractStrategy(); try { CreateMacro("PYTHA_PARK_2", "PYTHA_PARK"); } catch (System.Exception e) { } "@ } | Set-Content $destination_file Über eine Hilfe würde ich mich sehr freuen!!!
×
×
  • Neu erstellen...