rainersp
Goto Top

Batch oder VBS zum kürzen des ersten Teils einer Serie von Dateinamen von Textdateien und Convertierung in PDF Dateien

Ich bin Frischling und habe keine Ahnung von Programmierung - Bitte um Verständnis

Hi Community,
Ich bin am verzweifeln, denn ich find nach tagelangem Suchen im Netz keine brauchbare Lösung
für mein Problem. Ihr seit meine letzte Hoffnung!
Ich suche nach einem VBscript oder einer Batchdatei die mir das mühsame per Hand Umbenennen einer Reihe
von txt Dateien und anschließende Convertieren in PDF Dateien abnimmt.
Wenn das mit der PDF Convcertierung schwierig ist, würde ich mich schon mit dem ersten Teil meiner
Aufgaben-Anforderung begnügen.
Das script soll:
1. von den tägl. 5-20 Textdateien die nach folgenden Schema generiert werden -
txt00001.abcdef_ghijkl.txt
txt00002.jklmn_rstuvwxyz.txt usw.
die ersten 9 Zeichen aller Dateinamen incl. dot (also txt00001.) löschen
s.d. nur noch abcdef_ghijkl.txt bleibt.
Die Zeichenzahl der Dateien variiert von Datei zu Datei.
2. Wenn möglich alle umbenannten *.txt in *.pdf
convertieren.
3. Alle *.*.txt Dateien unter 1. befinden sich im
Ordner z.B. C:\Test
Hat jemand von Euch Sezialisten eine Lösung für mich???
Gruß Rainer

Content-Key: 201482

Url: https://administrator.de/contentid/201482

Printed on: April 26, 2024 at 19:04 o'clock

Member: bastla
bastla Feb 09, 2013 at 12:18:12 (UTC)
Goto Top
Hallo RainerSp und willkommen im Forum!

Das Ubenennen ist, wenn das Namensschema wie beschrieben einheitlich ist, keine große Sache:
@echo off & setlocal
set "Basis=C:\Test"  
set "Schema=*.*_*.txt"  

for %%i in ("%Basis%\%Schema%") do for /f "tokens=1* delims=." %%a in ("%%~ni") do @echo ren "%%i" "%%b%%~xi"  
pause
Wegen des "echo" vor dem "ren" wird die Umbenennung nur simuliert, indem der entsprechende Befehl angezeigt wird - wenn's passt, einfach dieses "echo" entfernen.

Grüße
bastla
Member: RainerSp
RainerSp Feb 09, 2013 at 13:00:11 (UTC)
Goto Top
Hi bastla,
ich bin begeistert!!! Das funktioniert richtig gut. Tja, wenn man weiß wie es geht.
Vielen Dank!
Wenn es nun noch mit dem 2.Teil der Aufgabe klappen würde, also der Konvertierung
der umgewandelten abc_def.txt Dateien in abc_def.pdf Dateien per Batch oder Script
wäre ich total happy.
Viele Grüße Rainer
Member: Biber
Biber Feb 09, 2013 at 14:25:32 (UTC)
Goto Top
[OT]
Zitat von @bastla:
Das Ubenennen ist, wenn das Namensschema wie beschrieben...
Set /a rgc+=1
#842
Wenigstens mal eine neue Variante face-wink

Grüße
Biber
[/OT]
Member: bastla
bastla Feb 09, 2013 updated at 19:04:24 (UTC)
Goto Top
[OT 2] @ Biber
Dass ich das noch erleben musste face-confused ...

Grüße
bastla
[/OT 2]
Member: bastla
bastla Feb 11, 2013 updated at 14:48:05 (UTC)
Goto Top
Hallo RainerSp!

Für die Konvertierung habe ich (neben mehreren kostenpflichtigen Programmen) bei der Suche (mit den Stichwörtern "text to pdf +commandline") "text2pdf" von einem Anbieter mit dem interessanten Namen "AdultPDF" gefunden - falls Du das verwenden wolltest (ich habe es nur kurz in einer Testumgebung gestartet), wäre die Zeile 5 abzuändern auf
for %%i in ("%Basis%\%Schema%") do for /f "tokens=1* delims=." %%a in ("%%~ni") do (  
    "%programfiles%\AdultPDF\Text To PDF\TxtToPDF.exe" "%%i" "%%~dpi%%b.pdf"  
    ren "%%i" "%%b%%~xi"  
)


Grüße
bastla
Member: RainerSp
RainerSp Feb 12, 2013 at 22:37:26 (UTC)
Goto Top
Hallo bastla,
Du bist ein Genie!!!! Das ist ja sowas von genial.
Ich habe mich bisher immer mit PDF-Umgehungsprogrammen,
die nur Zeit kosten geplagt...aber so ist das wunderbar.
Einzige Hürde - die DOS Box fordert nach Start der Batch
eine Eingabebestätigung. Wie kann man das umgehen?
Das sortieren der Dateien in entsprechende Ordner bekomme
ich sicher alleine hin.
Nochmals vielen vielen Dank!!!!
Member: bastla
bastla Feb 12, 2013 at 22:44:53 (UTC)
Goto Top
Hallo RainerSp!
die DOS Box fordert nach Start der Batch eine Eingabebestätigung
Falls damit nicht die "pause" in Zeile 6 (war ohnehin nur für die Testphase gedacht) gemeint ist, solltest Du das noch näher beschreiben ...
Das sortieren der Dateien in entsprechende Ordner bekomme ich sicher alleine hin.
Das ließe sich vermutlich auch gleich in die Schleife einbauen - mach mal (und bei Fragen einfach fragen face-wink).

Grüße
bastla
Member: RainerSp
RainerSp Feb 13, 2013 at 18:56:14 (UTC)
Goto Top
Hallo bastla,
eigentlich läuft das vbScript, wo ich Deine Batch eingebaut habe recht flüssig. Aber mit jeder Verbesserung wächst auch der Anspruch, die Sache noch etwas perfekter zu gestalten.
Gelöst für mich hast Du meine Probleme mit dem Kürzen der *.*.txt Dateien und die Einbindung dieses genialen und
wirkllich schnell konvertierden PDF Tools. Die konvertierten PDF Dateien landen neben den veränderten *.txt Dateien im selben Ordner. Ich habe jetzt eine weitere Batchdatei in das vbscript gelegt, welche die PDF Dateien in einen anderen Ordner verschiebt und danach die nicht mehr benötigten *.txt Dateien löscht (vorher aber noch in einem neuen Ordner mit Zeit- und Datumsstempel eine Sicherungskopie anlegt). Das klappt alles bestens. Vor Löschung und Fertigung der Sicherungskopie wird der Ordner mit den *.pdf Dateien nochmals zur Kontrolle geöffnet und eine MsBox kommt mit der Frage ob alles oK und der Löschvorgang starten kann.Wie gesagt, klappt alles aber es gibt kleine "Hackser".
Warum kann ich nicht das ganze vbscript im Hintergrund ablaufen lassen. Es öffnet sich immer das DOS promt Fenster.Wird eine Verknüpfung des vbscripts erstellt und dann unter Einstellungen Fenster minimiert eingestellt öffnet sich die DOS Box wenigstens nur kurz. Geht das anders? Das zweite klitzekleine Problem - bei der Kontrolle vor dem Löschen und der Sicherung der *.txt Dateien soll sich nochmal zur KOntrolle der Ordner mit den erstellten *.pdf dateien öffnen. Es ist mir gelungen die sich dann im scriptverlauf öffnende MsBox so anzulegen, daß sie immer im Vordergrund bleibt. Ich habe aber keine Idee, wie ich den geööfneten Odner über das vbscipt wieder schließen kann.Da er nicht im Vordergrund ist, klappt es auch nicht ohne weiteres mit sendkeys Strg und F4, Es geht, wenn ich im script 3x nacheinander Strg und F4 schreibe. Das ist aber doch nicht professionel!!! Geht das auch anders?? Nochmals, mein script funktioniert aber vielleicht gehts noch etwas besser!?
Herzliche Grüße RainerSp
Member: bastla
bastla Feb 13, 2013 at 20:11:54 (UTC)
Goto Top
Hallo RainerSp!

Einen Batch "unsichtbar" ausführen kannst Du mit
Shell.Run "Batchdatei", 0
Um ein Ordnerfenster zu öffnen und auch wieder schließen zu können, könntest Du ev einen alternativen Dateimanager (wie etwa "hier) - mit einem gewöhnlichen Explorer-Fenster dürfte das etwas schwierig werden ...

Grüße
bastla
Member: RainerSp
RainerSp Feb 14, 2013 at 17:20:54 (UTC)
Goto Top
Hallo bastla,
Shell.run "Batchdatei", 0 hat nicht funktioniert aber
Shell.run "Batchdatei",0,True
darunter läuft alles schön im Hintergrund und kein DOS Fenster blinkt auf.
Ich habe in den Tagen viel gelernt, wenn auch Deine gebastelte Schleife für mich
ein Buch mit 7 Siegel ist. Hauptsache es funktioniert und das macht es jetzt
wunderbar. Nochmals 1000 Dank für Deine immer prompte und schnelle Hilfe.
Wenn ich wieder Probleme oder eine Idee für ein neues Script brauche, weiß
ich, an wen ich mich wenden muss.
Viele Grüße RainerSp
Member: bastla
bastla Feb 14, 2013 updated at 17:48:54 (UTC)
Goto Top
Hallo RainerSp!
wenn auch Deine gebastelte Schleife für mich ein Buch mit 7 Siegel ist.
Soll sie aber nicht bleiben - daher kurz zum Ablauf:
for %%i in ("%Basis%\%Schema%") do
liefert in der Schleifenvariablen "%%i" nacheinander die zu "%Basis%\%Schema%" (also im Beispiel "C:\Test\*.*_*.txt") passenden Dateien (mit komplettem Pfad).
for /f "tokens=1* delims=." %%a in ("%%~ni") do (
zerlegt für jede Datei den Namen ("%%~ni") ohne Dateityp (als Beispiel "txt00002.jklmn_rstuvwxyz") anhand des Trennzeichens "." und zwar nur bei dessen erstem Auftreten (wegen "tokens=1*" entstehen so nur 2 Teile - in "%%a" alles vor dem ersten Punkt, in "%%b" alles danach; auch, wenn hier noch weitere Punkte enthalten wären, würde wegen des "*" nicht weiter getrennt). Es enthält daher im Beispiel "%%a" den Teil "txt00002" und in "%%b" steht mit "jklmn_rstuvwxyz" der gewünschte neue (gekürzte) Name.
"%programfiles%\AdultPDF\Text To PDF\TxtToPDF.exe" "%%i" "%%~dpi%%b.pdf"
startet die "TxtToPDF.exe" und übergibt als ersten Parameter (= Quelle) die Ausgangsdatei in "%%i" (das wäre hier "C:\Test\txt00002.jklmn_rstuvwxyz.txt") und als zweiten Parameter (= Ziel) Laufwerk und Pfad der Ausgangsdatei ("%%~dpi" liefert "C:\Test\" mit abschließendem "\"), den neuen Namen lt "%%b" (also "jklmn_rstuvwxyz") und den Dateityp ".pdf"
ren "%%i" "%%b%%~xi"
schließelich sorgt für das Umbenennen der Ausgangsdatei "%%i" auf den neuen Namen "%%b" und behält den ursprünglichen Dateityp "%%~xi" (= ".txt") bei - hier könnte zwar ".txt" auch unmittelbar angegeben werden, mit der variablen Schreibweise bleibt der Batch aber flexibler und als ev Zusatznutzen bleibt auch zB Groß-/Kleinschreibung des Dateityps wie im Original.

Nachlesen kannst Du die Bedeutung von zB "%%~ni" in der Online-Hilfe mit "for /?" (ziemlich gegen Ende der Ausgabe; dass im Batch für Schleifenvariablen 2 Prozentzeichen verwendet werden müssen, wusstest Du vielleicht ohnehin schon).

Grüße
bastla
Member: RainerSp
RainerSp Feb 19, 2013 at 16:32:00 (UTC)
Goto Top
Hallo bastla,
vielen Dank für Deine erklärenden Worte. Werde das mal in einer ruhigen
Stunde durchdenken und nachvollziehen.
Habe aktuell aber ein anderes Problemchen.
Gibt es ein Batchbefehl zum maximieren eines vonher minimierten
Win Fensters. Mit nircmd kann man ein minimiertes Fenster schließen
aber um ein bestimmtes Fenster was klein abgelegt wurde wieder zu maximieren finde
ich nichts. Vielleicht hast Du eine Idee??
Gruß Rainer
Member: RainerSp
RainerSp Feb 20, 2013 at 11:59:39 (UTC)
Goto Top
Alles bestens, habe selber bei nircmd die Lösung für
das Maximieren eines Fensters gefunden.
RainerSp