Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Wort aus String "herrausschneiden", FileOpenDialog

Mitglied: Bruno8500

Bruno8500 (Level 1) - Jetzt verbinden

14.12.2019, aktualisiert 17:49 Uhr, 446 Aufrufe, 12 Kommentare, 6 Danke

Ich bin gerade dabei ein CMD Skript zu schreiben für folgende Anwendung:
Wenn man bei DHL eine Online Frankierung kauft und als PDF runterlädt, ist in der PDF Datei nicht nur die Frankierung an sich enthalten, sondern auch noch der Beleg mit den Sendungsinformationen.
Den Beleg möchte ich aber extra ausdrucken da ich die Frankierung auf selbstklebendes Papier ausdrucke.
Die PDF Datei ist so aufgebaut das in der oberen Hälfte die Frankierung ist und in der unteren der Beleg.

Also müsste ich die PDF Datei in der Hälfte "schneiden". Da das aber nicht so einfach geht konvertiere ich die PDF Datei zu einem PNG Bild mit xpdf
und schneide es dann mit GraphicsMagick zurecht
Falls zwei dieser Frankierungen vorhanden sind, füge ich sie ebenfalls mit GraphicsMagick zusammen
Der Benutzer soll dann nur noch seine Online Frankierungen auswählen und die werden dann automatisch zugeschnitten und in die entsprechenden Ordner gespeichert (Belege in den Belege Ordner, Frankierungen in den Frankierungen Ordner).

Bisher funktioniert das mit den Pfad auswählen zu den PDF Dateien nur per Drag and Drop aber das möchte ich noch umändern sodass man nur noch mit einem Dialog mit den Explorer die Dateien auswählen kann.

Jetzt hab ich noch das Problem mit der Namensgebung.
Die PDF Dateien die man runterlädt sind im Folgenden Format gespeichert:
"DHL_label_YYYY-MM-DD_HH_MM_SS.png"
(DHL_label_Jahr-Monat-Tag_Stunde_Minute_Sekunde.png)
Beispiel:
DHL_label_2019-12-8_21_40_6.pdf

Diese Uhrzeit möchte ich übernehmen, also das "DHL_label" und ".pdf" vorne und hinten raus schneiden
und dann als entsprechenden "Beleg_2019-12-8_21_40_6.png" und "Frankierung_2019-12-8_21_40_6.png" seperat abspeichern.

Leider blick ich dass mit den "for /f" noch nicht durch, mit den wäre das machbar.

Dann wäre da noch das auswählen der Dateien mit den Explorer, da habe ich folgenden Code gefunden:
Quelle: (Batch) Open File or Folder Dialog
Den Code möchte ich so umändern das der Benutzer nur PDF Dateien auswählen kann (maximal 2 wenn möglich) und dass dann der Pfad als Variable ausgegeben wird sodass ich diese später nutzen kann.

Schönen Abend,
Bruno
Mitglied: SeaStorm
14.12.2019 um 22:24 Uhr
Hi

vergiss Batch bitte und verwende gleich Powershell.
Und da kannst du dann deinen String mit Regex zerlegen wie du lustig bist, z.B

Bitte warten ..
Mitglied: rubberman
LÖSUNG 15.12.2019 um 14:14 Uhr
nur PDF Dateien auswählen
Filter Property setzen.
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.filedia ...
(maximal 2 wenn möglich)
Nicht möglich. Wenn das Multiselect Property auf true gesetzt ist, gibt es keine Beschränkung. Das musst du im Nachgang prüfen.
Aus dem ersten Teilcode fliegt ein assoziatives Array (filename[1] .. filename[n]) und die Anzahl der ausgewählten Dateien (n).
Im zweiten Teilcode werden die Dateinamen verarbeitet. Der Unterstrich wird als Trennzeichen angenommen. Anhand deines Beispiels bin ich davon ausgegangen dass immer 2 Unterstriche im Dateiname vorkommen, bevor das Datum folgt.

Den ganzen Kram mit deinen 3rd Party Tools musst du selbst dazu basteln. Kenne ich nicht.

Steffen
Bitte warten ..
Mitglied: TK1987
LÖSUNG 15.12.2019, aktualisiert um 16:16 Uhr
Zitat von Bruno8500:
Diese Uhrzeit möchte ich übernehmen, also das "DHL_label" und ".pdf" vorne und hinten raus schneiden
und dann als entsprechenden "Beleg_2019-12-8_21_40_6.png" und "Frankierung_2019-12-8_21_40_6.png" seperat abspeichern.

Leider blick ich dass mit den "for /f" noch nicht durch, mit den wäre das machbar.
Ist eigentlich ganz einfach:
  • mit Delims bestimmst du das Trennzeichen, dass die Zeichenkette splittet.
  • mit Tokens bestimmst du, welche Teile der Zeichenkette in welche Variable geschrieben werden.

Beispiel für deinen Fall:
Die Zeichenkette wird durch Unterstriche getrennt. Der zweite Teil, also "label" wird in %%A geschrieben, alles was dahinter kommt, also "2019-12-8_21_40_6.pdf" wird in die Variable mit dem nächsten Buchstaben geschrieben, also %%B

Dann wäre da noch das auswählen der Dateien mit den Explorer, da habe ich folgenden Code gefunden:
Wenn du das wirklich über einen File-Dialog lösen willst, also den Powershell-Befehl nutzen möchtest, kann ich @SeaStorm nur beipflichten, dann solltest du lieber gleich Powershell benutzen.

Es gäbe allerdings eine andere Möglichkeit, über den Dateiexplorer Dateien auszuwählen und mit einer Batch zu verarbeiteten, nämlich über SendTo.

Geh in deinen Windows Explorer, drücke Strg+L und tippe dort shell:sendto ein. Du landest im Verzeichnist %APPDATA%\Roaming\Microsoft\Windows\SendTo. Wenn du ein Batchscript (oder eine Verknüpfung zum solchen) in diesen Ordner legst, kannst du später einfach im Explorer mehrere Dateien auswählen und mit Rechtsklick>Senden an> das Batchscript auswählen und die Dateien werden als Argument an das Script übergeben.

Das gestartete Script selbst ist immer über die Variable %0 erreichbar, das 1. übergebene Argument über die Variable %1, das 2. über %2, ...
Zudem kann man alle Argumente über %* erreichen.

Als Beispiel:
Zuerst wird eine For-Schleife erstellt, die die übergebenen Argumente enthällt (also deine PDF-Dateien, die du an das Script gesendet hast). Diese werden in die Variable %%A geschrieben.
Dann wird eine zweite For-Schleife erstellt, die nur den Dateinamen ohne Erweiterung enthält, also "DHL_label_2019-12-8_21_40_6". Diese wird, wie oben schon beschrieben gesplittet. Anschließend wird eine Variable für den Dateipfad und eine für den nach deinen wünschen geänderten Dateinamen erstellt. Dieser wird dann ausgegeben.

Wenn du dieses Script also in den SendTo-Ordner legst und anschließend mal mehrere PDF-Dateien auswählst und an das Script sendest, dürfte es dir für jede dieser PDF-Dateien den Pfad mit dem neuen Dateinamen anzeigen.

maximal 2 wenn möglich
Geht damit auch ganz einfach, indem du nur das 1. und das 2. übergebene Argument verarbeitest.
Bitte warten ..
Mitglied: Bruno8500
15.12.2019 um 18:25 Uhr
Kann ich den Output
als 2 seperate Variablen für Batch "umwandeln"?
Da die 3rd Party Tools mit Batch laufen brauche ich den Dateipfad und Dateinamen als separate Variablen
Bitte warten ..
Mitglied: rubberman
LÖSUNG 15.12.2019, aktualisiert um 19:02 Uhr
Ich weiß nicht ganz auf was du hinaus willst. %%l ist eine separate Variable und !filename[%%i]! auch. Ich gehe davon aus dass du deine Tools innerhalb der Schleife aufrufst (also da wo jetzt die zitierte ECHO Ausgabe steht). Somit weiß ich nicht was du noch mehr brauchen solltest, als das was du schon hast
Ersetze die Zeile doch mal durch ...
... vielleicht wird es dann klarer.

Steffen
Bitte warten ..
Mitglied: Bruno8500
15.12.2019 um 19:15 Uhr
Wenn ich zwei PDF Dateien auswähle, sind beide Pfade und Namen in jeweils einer Variable hinterlegt.
Heißt wenn ich die Variable für mein 3rd Party Tool nutze funktioniert das nicht weil ja in der einen Variable zwei Pfade hinterlegt sind
Bitte warten ..
Mitglied: rubberman
LÖSUNG 15.12.2019 um 19:19 Uhr
Sorry, ich versteh's nicht. Gib doch mal ein reales Beispiel für deine Kommandozeile für eine Datei und ein Beispiel für 2 Dateien.

Steffen
Bitte warten ..
Mitglied: Bruno8500
15.12.2019 um 19:31 Uhr
Wenn ich die Variable mit einer ausgewählten Datei nutze, klappt das, das Programm konvertiert die ausgewählte PDF Datei in ein PNG um:
Wenn ich aber zwei PDF Dateien auswähle, wird nur die erste konvertiert und die zweite ignoriert
Bitte warten ..
Mitglied: rubberman
LÖSUNG 15.12.2019 um 20:35 Uhr
Ich kann dir immer noch nicht folgen. Du musst alles was für eine Datei zu erledigen ist, in den Schleifenrumpf packen (also incl. der gm.exe Aufrufe). Sonst kann das nicht funktionieren, da deine Ausgabedatei output.png bei jeder Schleifeniteration überschrieben wird. Ich kann aber nicht auf deinen Bildschirm sehen, darum habe ich nach wie vor keine Ahnung wie du den ganze Kram nun verwurstet hast und wo der Fehler liegt ...

Steffen
Bitte warten ..
Mitglied: Bruno8500
16.12.2019 um 20:12 Uhr
Das ist das Problem: Ich hätte gerne die Pfade ohne Schleife, für jeden Pfad jeweils eine Variable damit ich die Pfade später dann benutzen kann um die PDF Dateien - nachdem sie zu einem PNG konvertiert worden sind - zusammenzufügen.


Dieser Code gilt für den Fall dass der User 2 PDF Dateien ausgewählt hat:

Da ich nur die obere Hälfte der PDF Datei benötige, schneide ich den unteren Teil mit GraphicsMagick weg und speichere das dann als neue Datei:

Das wäre bis jetzt noch in der Schleife möglich gewesen, aber jetzt möchte ich die zwei geschnittenen Bilder zu einem Bild zusammenfügen:


Ich hoffe man versteht was ich meine.
Dein Code funktioniert bis jetzt richtig gut, ich brauche nur den Output als 2 seperate Variablen damit ich diesen wie beschrieben nutzen kann.
Bitte warten ..
Mitglied: rubberman
LÖSUNG 16.12.2019 um 20:29 Uhr
Darum frage ich doch schon die ganze Zeit was bei 2 Dateien anders ist.
Damit sollte es aber nun machbar sein...

Steffen
Bitte warten ..
Mitglied: Bruno8500
16.12.2019 um 20:37 Uhr
Ah jetzt hab ich die Schleife gecheckt.
Sorry ich wusst nicht wie ich auf den "Counter" zugreifen kann
Bitte warten ..
Ähnliche Inhalte
Visual Studio

VB.Net - RegEx - String enthält NICHT ein bestimmtes Wort

gelöst Frage von emeriksVisual Studio4 Kommentare

Hi, RegEx ist nicht meine Stärke. Ich will in einem meiner Programme benutzerdefinierte Textfilter einbauen. Die Benutzer sollen u.a. ...

Batch & Shell

Textdatei (.txt) Wort für Wort auslesen per batch (Spaltenweise)

Frage von pdiddoBatch & Shell1 Kommentar

Hi, ich habe eine Textdatei (.txt). Diese hat mehrere Zeilen. Ich möchte diese gerne Spalte für Spalte auslesen, sodass ...

Java

Von Delphi String zu Java String

Frage von GreenDinoJava1 Kommentar

Hallo zusammen! Ich bin dabei Delphicode in Javacode zu übertragen. Frage: ist '<text>' in Delphi equivalent zu "<text>" in ...

Visual Studio

String-Vergleich optimieren

gelöst Frage von MarcoBornVisual Studio4 Kommentare

Hallo Forum, ich habe folgenden Code-Schnipsel (vereinfacht): Ich vergleiche für jeden Absatz eines Word-Textes Inhalte mit 9 Strings, die ...

Neue Wissensbeiträge
Viren und Trojaner
Emotet: IT-Totalschaden beim Kammergericht Berlin
Information von StefanKittel vor 23 StundenViren und Trojaner7 Kommentare

Interne Daten wurden geklaut und "ein kompletter Neuaufbau der IT-Infrastruktur wird angeraten", heißt es im forensischen Bericht zum ...

Viren und Trojaner
Avast verkauft anscheinend browserdaten
Tipp von magicteddy vor 1 TagViren und Trojaner14 Kommentare

Moin, da es immer wieder Anfragen zu Virenscannern gibt denke ich das der Artikel von Heise Avast verkauft Bowserdaten ...

Router & Routing

Statische Route dauerhaft einrichten unter Ubuntu 18.04 LTS

Erfahrungsbericht von the-buccaneer vor 3 TagenRouter & Routing2 Kommentare

"Kann ja nicht so schwer sein, unter Ubuntu 18.04 LTS ne statische Route einzurichten", denkt der Windows-Admin und gelegentliche ...

Microsoft

Effect on customer websites and Microsoft services and products in Chrome version 80 or later

Information von Dani vor 3 TagenMicrosoft

Guten Abend zusammen, The Stable release of the Google Chrome web browser (build 80, scheduled for release on February ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Installation USG
Frage von jo23487LAN, WAN, Wireless47 Kommentare

Hallo zusammen, nach den beiden anderen Fragen habe ich mir den Cloud Key und auch ein USG gekauft - ...

Microsoft
All-Cloud für KMU (Management, Backup, etc.)
Frage von NRGNRGMicrosoft20 Kommentare

Hallo zusammen, kurze Interessensfrage an Euch in die Runde, da ich hierzu gerade interessante Diskussionen mit Kollegen habe: Szenario: ...

Router & Routing
NAS im VPN zu langsam mit FritzBox 7490
Frage von holger3208Router & Routing19 Kommentare

Hallo, ich habe eine Telekom VDsl Leitung mit einer 50/10 Leitung. Einen Qnap NAS TS-231P2 (4GB RAM) Eine FritzBox ...

TK-Netze & Geräte
Empfehlung DSL Modem
Frage von CorraggiounoTK-Netze & Geräte18 Kommentare

Hi Leute, könntet ihr mir eine Empfehlung für ein DSL Modem aussprechen? Provider ist die Telekom dahinter steht gleich ...