.sessl
Goto Top

Übergabeparameter in Variable

Hallo zusammen,

folgendes Problem:

PDF Druck aus SAP mittels Kommando das eine *.cmd Datei auf OS Ebene ausführt, welche die PDF Datei auf einen externen Server in eine Freigabe schiebt.
Bis hierher funktioniert alles, *.cmd sieht folgendermaßen aus:

@echo off
REM %1 Dateiname
set ziel=\\10.10.10.10\PDF_Export
REM Datei kopieren
cmd /c copy %1 %ziel% >> \\10.10.10.10\PDF_Export\error.log

Jedoch wird die PDF Datei mit der Spool Nr. gespeichert: z.B. 00000004321600000.MM2 (MM2 ist die SystemID des SAP <SID>)
Ich möchte nun den Übergabeparameter %1 in eine Variable stecken, die Pfadangaben abschneiden, damit ich die Datei folgendermaßen umbenennen kann: 43216.pdf

Doch aus irgendeinem Grund will mir das nicht gelingen, ich bekomme diesen Parameter nicht in eine Variable.
Hab schon verschiedenste Foren durchsucht und auch hier kam die Frage mal auf, wurde jedoch nicht wirklich beantwortet.

Im Nachhinein über das Verzeichnis schauen möchte ich nicht, da ich diesen Server nicht verwalte.
Ist mein Vorhaben umsetzbar oder sollte ich mir einen komplett anderen Weg suchen?


DANKE!
Gruß Tobias

Content-Key: 161041

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

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: Biber
Biber 17.02.2011 um 19:18:25 Uhr
Goto Top
Moin Sessl,

ist denn die Anzahl der zu entsorgenden "führenden" und "folgenden" Nullen konstant,
d.h. wie in deinem Beispiel 7x Ziffer "0" am Namensanfang und 5x "0" am Namensende?

Dann könntest du nach folgender Mimik verfahren (Demo am CMD-Prompt):
>set "PDFname=00000004321600000.MM2"

>echo SET "PDFName=%pdfname:~7,5%%pdfname:~-4%"
SET "PDFName=43216.MM2"

versuchte Kurzerläuterung.
%pdfname:~7,5% --> Nimm von der Variable %pdfname% den Teilstring ab Position 7 (beginne mit Pos 0 zu zählen) in der Länge 5
%pdfname:~-4%" --> Mimm von der Variable %pdfname% den Teilstring 4 Zeichen vom Ende an gerechnet

Grüße
Biber
Mitglied: .Sessl
.Sessl 17.02.2011 um 19:28:55 Uhr
Goto Top
Hallo Biber,

vielen Dank für die rasche Antwort.
An für sich ist das immer gleich, d.h. sollten es mal mehr wie 43216 Aufträge werden, würde es mit 000000|100000|00000.MM2 weiter gehen.
Das Problem liegt jedoch, das der Dateiname in einem Übergabeparameter %1 liegt und ich diesen einfach nicht in eine Variable bekomme.
set var=%1
set var = "%1"  
set /p var = %1
Jedes echo %var% endet mit einem Echo is off. Varible wird also nicht befüllt.


Danke
Gruß Tobias
Mitglied: Biber
Biber 17.02.2011 um 19:38:33 Uhr
Goto Top
Moin .Sessl ,

ich habe deine drei Zeilen mal in Codetags gestzt, dann ist es einfacher zu sehen.

In Zeile 02 und Zeile 03 ist das Problem, dass du nicht etwa eine Variable %var% setzt (wie du glaubst), sondern eine Variable %var[Leerzeichen]%.
Mach mal statt eines [echo %var%] wie in deinem Test ein [Set var], dann siehst du, was ich meine.

Gewöhne dir an, die Zuweisungen strikt so zu schreiben
Set "var=derWertWoVarHabenSoll"  
  • Vermeide Leerzeichen VOR dem Gleichheitszeichen
  • Vermeide Leerzeichen Nach dem Gleichheitszeichen
  • Vermeide Leerzeichen NACH dem zugewiesenen Wert

Grüße
Biber
Mitglied: .Sessl
.Sessl 17.02.2011 um 20:01:34 Uhr
Goto Top
Alter Schwede ..

ich glaub es nicht! Ich war mich sicher das

var=%1

nicht funktionierte, ich glaub ich sollte doch nach Hause gehen face-smile
Meine print.cmd sieht nun folgendermaßen aus:

@echo off

set var=%1
set file=%var:~30%
set var=%var:~30,10%
set var=%var%.pdf

rem %1 Dateiname
set ziel=\\10.10.10.10\PDF_Export
REM Datei kopieren
cmd /c copy %1 %ziel% >> \\10.10.10.10\PDF_Export\error.log
move \\10.10.10.10\PDF_Export\%file% \\10.10.10.10\PDF_Export\%var%  >> \\10.10.10.10\PDF_Export\error.log


Besten Dank für die schnelle Hilfe und die Erhellung!

Gruß Tobias
Mitglied: bastla
bastla 17.02.2011 um 20:11:00 Uhr
Goto Top
Hallo .Sessl!

Wenn Du jetzt nach Hause gehst, nimm das "cmd /c" mit und schau morgen mal, ob es jemandem fehlt ... face-wink

... und nur für den Fall des Falles würde ich noch eine andere Schreibweise für die Zeile 3 wählen:
set "var=%~1"
So landen sicher keine den Parameter 1 umgebende Anführungszeichen in der Variablen (und wenn's die - die Anführungszeichen - sowieso schon nicht gibt, macht das auch nix).

Letzter Hinweis: Wenn "\\10.10.10.10\PDF_Export" schon mal in einer Variablen (%ziel%) untergebracht ist, solltest Du die in weiterer Folge auch (ausschließlich - wird damit leichter wartbar) verwenden.

Grüße
bastla
Mitglied: .Sessl
.Sessl 17.02.2011 um 20:30:15 Uhr
Goto Top
Hallo bastla,

danke für die Ermutigung zum Aufräumen, cmd /c fehlt wirklich nicht, wer hätte das gedacht:

@echo off

set "var=%1"  
set file=%var:~30%
set var=%var:~30,10%
set var=%var%.pdf

rem %1 Dateiname
set ziel=\\10.78.1.235\PDF_Export
REM Datei kopieren
copy %1 %ziel% >> %ziel%\error.log
move %ziel%\%file% %ziel%\\%var%  >> %ziel%\error.log

Besten Dank!

Gruß Tobias
Mitglied: Biber
Biber 17.02.2011 um 20:50:49 Uhr
Goto Top
Moin .Sessl!,

noch ein allerletzter Hinweis.

Zitat von @.Sessl:
ich glaub es nicht! Ich war mich sicher
...
Meine print.cmd sieht nun folgendermaßen aus:
Es kann auch unerwünschte Seitenffekte haben, wenn du deine Schnipsel so nennst, wie sich auch schon andere interne/externe Befehle benannt haben.
In diesem Fall "print", in anderen Fällen, die auch hier im Forum gelandet sind "format" oder "copy".
Nenn doch deine Skriptdatei "PdfDruck.cmd" oder "printmich.cmd" oder aber (was am schwersten immer einzuhalten ist) rufe sie immer mit vollständigem Pfad und Endung auf.

Andererseits....
Selbst wenn du nur 30% der gut gemeinten Ratschläge im ersten Anlaufs befolgst, dürfte das schon einen 100%igen Spassgewinn beim Bätchebasteln bewirken.

Grüße
Biber