Batch-Scripting
Grüße an Alle,
hab jetzt die letzten 3-5 Stunden damit verbracht mittels Google und Co.
mir Hilfen und Beispiel-Code für eine (vermutlich zweigeteilte) Batchdatei zu holen, bin dabei aber noch nicht ganz fündig geworden.
Vielleicht kann mir aber jemand bei dem Problem helfen, denke sogar das es recht simpel ist, aber ich mal wieder den Wald vor lauter Bäumen nicht sehe.
Folgendes:
Wir erstellen mit Hilfe eines Multifunktionsgeräts TIFF-Dateien und legen diese auf einem FTP-Server ab. Soweit so gut, nur hat der Drucker den Nachteil, das er seinen Profilnamen als Ordnername nutzt und diesen hochnummeriert. Die Dokumente darin lauten dann jeweils 00001.tiff 00002.tiff etc.
Wir haben den Drucker nun so umprogrammiert, das er bei dem SCAN-Vorgang einen Wert abfrägt, denn wir eintragen können.
Diesen schreibt er aber leider nur in eine METADATEI (XST) hinein und kann diesen Wert nicht als Ordernnamen nutzen.
So sollte es aussehen:
Die Batchdatei öffnet über das Hauptverzeichnis des geplanten Archives die Unterordner und sucht dort nach der XST.Datei.
Dieser entnimmt er einen String (also eine komplette Zeile) die er dann in zwei Teilbereiche zerlegt, nämlich Alt und Neu.
Nun würde man mit diesen beiden Werten erstmal simpel den REN Befehl durchführen.
So sieht man bisheriges Ergebnis aus:
Die erste Zeile schaltet erstmal alles störende auf dem Bildschirm aus, die zweite Zeile sucht dann nach der XST Datei und übergibt die gesuchte Zeile für die weitere Verarbeitung an den SET Befehl, der daraus eine Variable zeile generiert, die mittels Echo derzeit erstmal in die zwei Teilbereiche aufgedröselt wird.
Problem derzeit ist aber, das sich dabei der Wert in Zeile nicht ändert und auf dem letzten Wert in der Liste stehen bleibt und dies dann für alle anderen Dateien auch so übergibt.
Habe schonmal mit OPtion /V an der CMD und !zeile! versucht das Ergebnis zu verbessern derzeit aber noch ohne Ergebnis. Habe ich da einen Denkfehler in meiner FOR Schleife oder an was liegt es?
mfg
Forseti2003
hab jetzt die letzten 3-5 Stunden damit verbracht mittels Google und Co.
mir Hilfen und Beispiel-Code für eine (vermutlich zweigeteilte) Batchdatei zu holen, bin dabei aber noch nicht ganz fündig geworden.
Vielleicht kann mir aber jemand bei dem Problem helfen, denke sogar das es recht simpel ist, aber ich mal wieder den Wald vor lauter Bäumen nicht sehe.
Folgendes:
Wir erstellen mit Hilfe eines Multifunktionsgeräts TIFF-Dateien und legen diese auf einem FTP-Server ab. Soweit so gut, nur hat der Drucker den Nachteil, das er seinen Profilnamen als Ordnername nutzt und diesen hochnummeriert. Die Dokumente darin lauten dann jeweils 00001.tiff 00002.tiff etc.
Wir haben den Drucker nun so umprogrammiert, das er bei dem SCAN-Vorgang einen Wert abfrägt, denn wir eintragen können.
Diesen schreibt er aber leider nur in eine METADATEI (XST) hinein und kann diesen Wert nicht als Ordernnamen nutzen.
So sollte es aussehen:
Die Batchdatei öffnet über das Hauptverzeichnis des geplanten Archives die Unterordner und sucht dort nach der XST.Datei.
Dieser entnimmt er einen String (also eine komplette Zeile) die er dann in zwei Teilbereiche zerlegt, nämlich Alt und Neu.
Nun würde man mit diesen beiden Werten erstmal simpel den REN Befehl durchführen.
So sieht man bisheriges Ergebnis aus:
echo off
@for /f "delims=" %%f IN ('findstr /s "MetaDataValue" Sinsheim*.XST') DO (
SET zeile=%%f
echo %zeile:~16,11% %zeile:~62,7%
)
Die erste Zeile schaltet erstmal alles störende auf dem Bildschirm aus, die zweite Zeile sucht dann nach der XST Datei und übergibt die gesuchte Zeile für die weitere Verarbeitung an den SET Befehl, der daraus eine Variable zeile generiert, die mittels Echo derzeit erstmal in die zwei Teilbereiche aufgedröselt wird.
Problem derzeit ist aber, das sich dabei der Wert in Zeile nicht ändert und auf dem letzten Wert in der Liste stehen bleibt und dies dann für alle anderen Dateien auch so übergibt.
Habe schonmal mit OPtion /V an der CMD und !zeile! versucht das Ergebnis zu verbessern derzeit aber noch ohne Ergebnis. Habe ich da einen Denkfehler in meiner FOR Schleife oder an was liegt es?
mfg
Forseti2003
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 126685
Url: https://administrator.de/contentid/126685
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo Forseti2003!
Du wirst wegen des "/s" bei "
Wenn die Datei tatsächlich auch in Unterordnern gesucht werden muss, eher so:
Grüße
bastla
Du wirst wegen des "/s" bei "
findstr
" nicht nur die gesuchte Zeile, sondern vorneweg auch noch deren Pfad/Dateinamen erhalten - ansonsten wäre der Ansatz mit "!Zeile!" schon richtig, also etwa bei Suche nur in den .XST-Dateien des aktuellen Ordners:@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%f in ('findstr "MetaDataValue" Sinsheim*.XST') do (
set "Zeile=%%f"
echo !Zeile:~16,11! !Zeile:~62,7!
)
@echo off & setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%e in ('findstr /s "MetaDataValue" Sinsheim*.XST') do (
set "Zeile=%%f"
echo !Zeile:~16,11! !Zeile:~62,7!
)
Grüße
bastla
Hallo Forseti2003!
Kannst Du bitte etwas konkreter werden und eine Beispielzeile posten - die "Tournummer" etwa hattest Du vorher nicht erwähnt und jetzt nicht erklärt ...
In der Testphase ist es übrigens sinnvoll, anstelle von "
Grüße
bastla
Kannst Du bitte etwas konkreter werden und eine Beispielzeile posten - die "Tournummer" etwa hattest Du vorher nicht erwähnt und jetzt nicht erklärt ...
In der Testphase ist es übrigens sinnvoll, anstelle von "
echo off
" ein "echo on
" zu verwenden - so siehst Du alle Befehle, bevor sie ausgeführt werden (aber bereits mit Werten anstelle von Variablen) ...Grüße
bastla
Moin Forseti2003,
ich hoffe, du kannst noch die Augen aufhalten - laut deinem Eröffnungsbeitrag ("hab jetzt die letzten 3-5 Stunden damit verbracht mittels Google.." ) musst du ja schon seit 04h morgens mit dem Zerbröseln dieser .XST-Dateien unterwegs sein...*gg
Damit du heute noch irgendwann Feierabend machen kannst, würde ich als nächste Schritte vorschlagen:
Ändere den letzten Schnipselstand
in diesen hier (eigentlich keine inhaltliche Änderung)
Wenn Du vielleicht mal diesen Schnipsel testest und uns drei, vier Beispielausgabezeilen postest,
dann wissen wir, was zu erwarten ist.
Danke
Biber
ich hoffe, du kannst noch die Augen aufhalten - laut deinem Eröffnungsbeitrag ("hab jetzt die letzten 3-5 Stunden damit verbracht mittels Google.." ) musst du ja schon seit 04h morgens mit dem Zerbröseln dieser .XST-Dateien unterwegs sein...*gg
Damit du heute noch irgendwann Feierabend machen kannst, würde ich als nächste Schritte vorschlagen:
Ändere den letzten Schnipselstand
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%f in ('findstr /s "MetaDataValue" Sinsheim*.XST') do (
set "Zeile=%%f"
echo !Zeile:~16,11! !Zeile:~62,7!
)
in diesen hier (eigentlich keine inhaltliche Änderung)
@echo off & setlocal
for /f "delims=" %%f in (
'findstr /s "MetaDataValue" Sinsheim*.XST'
) do set "Zeile=%%f" & Call :ProcessATour
goto :eof
~~~~
hier Raum für Notizen
~~~
:ProcessATour in %Zeile% steht eine ganze Zeile mit "...MetaDataValue..."
Set "thisFolder=%Zeile:~16,11%"
Set "thisTournr=%Zeile:~62,7%"
REM ---- in dieser Zeile können wir Folder/Tournr-Check nachschieben ---
echo ThisFolder:[%thisFolder%] ThisTourNr:[%ThisTournr%]
goto :eof
Wenn Du vielleicht mal diesen Schnipsel testest und uns drei, vier Beispielausgabezeilen postest,
dann wissen wir, was zu erwarten ist.
Danke
Biber
Moin Forseti2003,
danke für die schnelle Antwort.
Sicherheitshalber die Frage:
Ist es wirklich vertretbar/sinnvoll, den Inhalt der "MetaDataValue-Zeile" stumpf nach Substring(Zeile, von, bis) zu teilen?
Wäre es nicht benutzerfreundlicher/prozessgerechter, tatsächlich als "%ThisFolder%" das rauszuflöhen, was ja offensichtlich (im IT-Sinne) "immer" mit "Sinsheim" anfängt in der Länge 11 und als %thisTournr% das, was vermutlich nach "MetaDataValue" und "T:" in der Länge 7?
Ist aber eher ein Nebenschauplatz...
Grüße
Biber
danke für die schnelle Antwort.
Sicherheitshalber die Frage:
Ist es wirklich vertretbar/sinnvoll, den Inhalt der "MetaDataValue-Zeile" stumpf nach Substring(Zeile, von, bis) zu teilen?
Wäre es nicht benutzerfreundlicher/prozessgerechter, tatsächlich als "%ThisFolder%" das rauszuflöhen, was ja offensichtlich (im IT-Sinne) "immer" mit "Sinsheim" anfängt in der Länge 11 und als %thisTournr% das, was vermutlich nach "MetaDataValue" und "T:" in der Länge 7?
Ist aber eher ein Nebenschauplatz...
Grüße
Biber
Moin Forseti2003,
in diesem fall würde ich in der Tat empfehlen, diese Zeile(n) nicht mit Abzählerei [SubStr(.., , .)] zu zerlegen, sondern gemäß ihrer gegebenen Struktur, so wie ich glaube verstanden zu haben.
Den Folder- bzw bei dir das Obje[c]tDataValue mit
Das wäre doch ausbaufähig, oder?
A propos aus- bzw abbauen... ich finde, wir geben dir mal den Rest des Nachmittags frei und machen morgen weiter.
Grüße
Biber
in diesem fall würde ich in der Tat empfehlen, diese Zeile(n) nicht mit Abzählerei [SubStr(.., , .)] zu zerlegen, sondern gemäß ihrer gegebenen Struktur, so wie ich glaube verstanden zu haben.
- wenn die Zeile 'string MetaDataValue = "6123456";' immer als Einzelzeile erwartet wird, dann bekämst Du diesen Wert aus jeder Simsheimxxxx.XST-Datei mit:
(=20:04:48 D:\temp=)
for /f "tokens=2 delims==;" %i in ('findstr "MetaDataValue" e:\schnipsel\sinshei*.xst') do @echo Tournr=%~i
Tournr= "6123456"
Den Folder- bzw bei dir das Obje[c]tDataValue mit
for /f "tokens=2 delims==;" %i in ('findstr "tDataValue" e:\schnipsel\sinshei*.xst') do @echo Folder=%~i
Folder= "Sinsheim001"
Das wäre doch ausbaufähig, oder?
A propos aus- bzw abbauen... ich finde, wir geben dir mal den Rest des Nachmittags frei und machen morgen weiter.
Grüße
Biber
Hallo Forseti2003!
Um hier doch auch etwas beizutragen: Wenn nur Ordner mit "Sinsheim" im Namen verarbeitet werden sollen, kannst Du die folgende Schleife verwenden:
Das Änderungsdatum von Dateien (sollte ja für PDF genügen) könntest Du direkt in einer Schleife etwa so erhalten / verwenden:
Grüße
bastla
[Eidt] Fehlendes Anführungszeichen nach
Um hier doch auch etwas beizutragen: Wenn nur Ordner mit "Sinsheim" im Namen verarbeitet werden sollen, kannst Du die folgende Schleife verwenden:
for /d %%a in ("s:\Archiv\Sinsheim*.XSM") do for /f "tokens=2 delims==;" %%i in ('findstr "MetaDataValue" "%%a\sinshei*.xst"') do echo Tournr=%%~i
for %%i in (*.PDF) do for /f "tokens=1-5 delims=.: " %%a in ("%%~ti%") do echo %%c-%%b-%%a_%%d%%e
bastla
[Eidt] Fehlendes Anführungszeichen nach
.xst
ergänzt [/Edit]
Hallo Forseti2003!
Grüße
bastla
kann ich mit copy oder xcopy beim kopieren gleich auch den Namen ändern?
Für einzelne Dateien (die nicht inklusive Pfad kopiert werden sollen, sodass also erst die Ordnerstruktur aufgebaut werden müsste) brauchst Du nur "copy
" - und ja, Du kannst durch die explizite Angabe des Zieles auch ein Umbenennen durchführen.Grüße
bastla