Batch FOR-Schleife Dateien vergleichen und drucken
Hallo liebe Gemeinde von administrator.de.
Habe mich hier angemeldet, da ich der Meinung bin, hier die Hilfe für mein Problem zu erhalten.
Ich habe nun seit mehreren Tagen dieses Forum durchsucht, Google befragt und gelesen ohne Ende.
Jedoch verstehe ich nicht immer alles, was ich direkt machen soll.
So, nun zu meinem Problem.
// EDIT: Sorry, hatte Formatierung glatt vergessen. Bitte um Entschuldigung
OS: WinXP
Scriptart: Batch
Situationsdarstellung:
Wir erhalten über einen FTP-Server theoretisch täglich neue Daten (DAT-Dateien).
Dort enthalten sind Barcodes, welche wir ausdrucken möchten/sollen.
Ich habe nun ein Batch-Script geschrieben, welches sich auf den FTP verbindet, die DAT-Dateien automatisch herunterlädt und dann Fragen stellt, was gemacht werden soll.
Hier der Auszug aus dem Batch-Script:
Kurze Script-Erklärung:
FTP-Verbindung herstellen -> Daten runterladen -> in Ordner X:\auftraege\2011\ speichern -> kopieren in Ordner X:\auftraege\2011\gedruckt um zu schauen, ob Daten schon vorhanden -> DAT-Dateien ausdrucken -> DAT-Dateien aus Ordner X:\auftraege\2011 löschen -> Programm beenden.
Nun zur Problemdarstellung:
Mein Problem ist nun, dass dieses Script natürlich alle DAT-Dateien drucken würde und zwar auch die, welche schon gedruckt wurden.
Mein Lösungsansatz war die FOR-Schleife und genau da harpert es bei mir.
Ich habe mir die Anleitung hier auf der Seite durchgelesen -> nicht wirklich verstanden, mehrere andere FOR-Schleifen-Tutorials gelesen -> nicht wirklich verstanden, mit dem Befehl FC probiert -> ist nicht die Lösung -> robocopy angeschaut -> ist nicht die Lösung.
Die Lösung ist zwar eine FOR-Schleife, nur ich bin wirklich etwas dämlich in dieser Beziehung (Delims, Tokens usw. = Böhmische Dörfer)
(Die Hilfe für FOR habe ich ebenfalls gelesen, aber ich bin programmiertechnisch (Script-Technisch) einfach dämlich, gebe ich auch offen zu)
Das ich das Script oben zusammenbekommen habe liegt auch nur an Google und Co. sowie probieren usw.
Die DAT-Dateien haben ein gewisses Muster: FZ_FIRMA_DATUM.LaufendeNummer.dat
Das Datum wird im Format YYYYMMDD dargestellt, bsp. 20110505.
Der Punkt dahinter ist auch nicht zu vergessen.
Meine Frage ist eigentlich nun folgende:
Das Script soll natürlich die Dateien downloaden in Ordner X:\auftraege\2011, prüfen ob bereits vorhanden in Ordner X:\auftraege\2011\gedruckt, wenn vorhanden -> Ur-Datei aus Ordner X:\auftraege\2011 löschen, wenn nicht vorhanden drucken, verschieben in Ordner X:\auftraege\2011\gedruckt und Urdatei in Ordner X:\auftraege\2011 löschen.
Das Einzige was das Script noch nicht macht, ist die Prüfung an sich und den dann weiteren Verlauf.
Das kann eigentlich nicht so schwer sein, aber irgendwie will das nicht in meinen Kopf.
Bitte auch nicht mit GUI-FTP-Programmen kommen. Hintergrund ist, die Mitarbeiterin soll auf einen Knopf drücken, höchstens mal noch 2-3 mal "J" drücken und fertig sein.
Ich würde mich über eine Antwort, mit entsprechendem Lösungsvorschlag sehr freuen.
Ansonsten kann mir auch gern jemand versuchen zu erklären, was es mit der FOR-Schleife (FOR /F usw.) wirklich auf sich hat, nur hier muss es wirklich für Babys erklärt sein.
Also das selbst ein 3-jähriger Mensch das verstehen würde.
Vielen Dank im Voraus und habt bitte etwas Verständnis für meine Minderbemitteltheit.
Habe mich hier angemeldet, da ich der Meinung bin, hier die Hilfe für mein Problem zu erhalten.
Ich habe nun seit mehreren Tagen dieses Forum durchsucht, Google befragt und gelesen ohne Ende.
Jedoch verstehe ich nicht immer alles, was ich direkt machen soll.
So, nun zu meinem Problem.
// EDIT: Sorry, hatte Formatierung glatt vergessen. Bitte um Entschuldigung
OS: WinXP
Scriptart: Batch
Situationsdarstellung:
Wir erhalten über einen FTP-Server theoretisch täglich neue Daten (DAT-Dateien).
Dort enthalten sind Barcodes, welche wir ausdrucken möchten/sollen.
Ich habe nun ein Batch-Script geschrieben, welches sich auf den FTP verbindet, die DAT-Dateien automatisch herunterlädt und dann Fragen stellt, was gemacht werden soll.
Hier der Auszug aus dem Batch-Script:
@echo off
cls
echo.
echo.
echo ##################################################
echo ## Moechten Sie die Daten jetzt herunterladen ? ##
echo ## ##
echo ## Druecken Sie J/N und dann ENTER ##
echo ##################################################
echo.
echo #################################################
echo ## Dieser Vorgang kann bis zu 5 Minuten dauern ##
echo ## ##
echo ## Bitte haben Sie etwas Geduld. ##
echo #################################################
echo.
echo.
SET /p auswahl=
if %auswahl%==j goto yes1
if %auswahl%==n goto no1
:no1
goto kopieren
:yes1
echo.
echo ###########################
echo ## Starte FTP-Verbindung ##
echo ###########################
echo.
echo.
ftp -s:conn.ect
// hier der Auszug aus der conn.ect-Datei:
OPEN IP-ADRESSE
Benutzername
Passwort
lcd "X:\lokaler_Ordner\"
cd /order/auf/ftp
binary
mget *.dat
y
y
close
quit
// Ende Auszug conn.ect-Datei
echo.
echo.
echo ######################
echo ## Download beendet ##
echo ######################
echo.
echo.
REM echo #######################################
REM echo ## Prüfe auf Vorhandensein der Daten ##
REM echo #######################################
// hier ist jetzt mein Problem (Problemdarstellung siehe unten)
:kopieren
echo.
echo.
echo ################################################
echo ## Moechten Sie die Auftraege verschieben ? ##
echo ## ##
echo ## Druecken Sie J/N und dann ENTER ##
echo ################################################
echo.
echo.
SET /p auswahl=
if '%auswahl%'=='j' goto yes3
if '%auswahl%'=='n' goto no3
:no3
goto printing
:yes3
echo.
echo.
xcopy X:\auftraege\2011\gedruckt /-Y
// Befehl erstmal dafür da, dass man sieht, ob Dateien schon vorhanden (Notlösung)
ping -n 4 127.0.0.1 >nul
:printing
echo.
echo #############################################
echo ## Moechten Sie jetzt drucken ? ##
echo ## ##
echo ## !!! BITTE WEISSES PAPIER EINLEGEN !!! ##
echo ## ##
echo ## Druecken Sie J/N und dann ENTER ##
echo #############################################
echo.
echo.
SET /p auswahl=
if '%auswahl%'=='j' goto yes2
if '%auswahl%'=='n' goto no2
:no2
goto loeschen
:yes2
PRINT /D:"\\ServerName\DruckerName" *.dat
echo.
echo.
echo #################################################
echo ## Druecken Sie eine beliebige Taste, wenn der ##
echo ## Druckvorgang beendet ist, um fortzufahren ##
echo #################################################
echo.
echo.
pause
:loeschen
echo.
echo.
echo #################################################
echo ## Moechten Sie die Auftraege nun loeschen ? ##
echo ## ##
echo ## Druecken Sie J/N und dann ENTER ##
echo #################################################
echo.
echo.
SET /p auswahl=
if '%auswahl%'=='j' goto yes4
if '%auswahl%'=='n' goto no4
:no4
goto beenden
:yes4
cd /D "X:\auftraege\2011"
del *.dat
:beenden
echo.
echo.
echo #################################################
echo ## Druecken Sie eine beliebige Taste, um das ##
echo ## Programm zu beenden. ##
echo #################################################
pause
exit
Kurze Script-Erklärung:
FTP-Verbindung herstellen -> Daten runterladen -> in Ordner X:\auftraege\2011\ speichern -> kopieren in Ordner X:\auftraege\2011\gedruckt um zu schauen, ob Daten schon vorhanden -> DAT-Dateien ausdrucken -> DAT-Dateien aus Ordner X:\auftraege\2011 löschen -> Programm beenden.
Nun zur Problemdarstellung:
Mein Problem ist nun, dass dieses Script natürlich alle DAT-Dateien drucken würde und zwar auch die, welche schon gedruckt wurden.
Mein Lösungsansatz war die FOR-Schleife und genau da harpert es bei mir.
Ich habe mir die Anleitung hier auf der Seite durchgelesen -> nicht wirklich verstanden, mehrere andere FOR-Schleifen-Tutorials gelesen -> nicht wirklich verstanden, mit dem Befehl FC probiert -> ist nicht die Lösung -> robocopy angeschaut -> ist nicht die Lösung.
Die Lösung ist zwar eine FOR-Schleife, nur ich bin wirklich etwas dämlich in dieser Beziehung (Delims, Tokens usw. = Böhmische Dörfer)
(Die Hilfe für FOR habe ich ebenfalls gelesen, aber ich bin programmiertechnisch (Script-Technisch) einfach dämlich, gebe ich auch offen zu)
Das ich das Script oben zusammenbekommen habe liegt auch nur an Google und Co. sowie probieren usw.
Die DAT-Dateien haben ein gewisses Muster: FZ_FIRMA_DATUM.LaufendeNummer.dat
Das Datum wird im Format YYYYMMDD dargestellt, bsp. 20110505.
Der Punkt dahinter ist auch nicht zu vergessen.
Meine Frage ist eigentlich nun folgende:
Das Script soll natürlich die Dateien downloaden in Ordner X:\auftraege\2011, prüfen ob bereits vorhanden in Ordner X:\auftraege\2011\gedruckt, wenn vorhanden -> Ur-Datei aus Ordner X:\auftraege\2011 löschen, wenn nicht vorhanden drucken, verschieben in Ordner X:\auftraege\2011\gedruckt und Urdatei in Ordner X:\auftraege\2011 löschen.
Das Einzige was das Script noch nicht macht, ist die Prüfung an sich und den dann weiteren Verlauf.
Das kann eigentlich nicht so schwer sein, aber irgendwie will das nicht in meinen Kopf.
Bitte auch nicht mit GUI-FTP-Programmen kommen. Hintergrund ist, die Mitarbeiterin soll auf einen Knopf drücken, höchstens mal noch 2-3 mal "J" drücken und fertig sein.
Ich würde mich über eine Antwort, mit entsprechendem Lösungsvorschlag sehr freuen.
Ansonsten kann mir auch gern jemand versuchen zu erklären, was es mit der FOR-Schleife (FOR /F usw.) wirklich auf sich hat, nur hier muss es wirklich für Babys erklärt sein.
Also das selbst ein 3-jähriger Mensch das verstehen würde.
Vielen Dank im Voraus und habt bitte etwas Verständnis für meine Minderbemitteltheit.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165879
Url: https://administrator.de/contentid/165879
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
23 Kommentare
Neuester Kommentar
Aloha,
bevor ich deinen EP weiterlese, tu uns allen bitte einen notwendigen Gefallen:
siehe
danke, danach lese ich dann auch gerne den Rest weiter.
greetz André
P.S.: An dem Code lässt sich auf jeden Fall noch vieles Optimieren ;)
edit ah, Formatierung, na gleich mal durchlesen, was er denn von uns mag ^_^
Du kannst auf jeden Fall schon einmal die Hälfte vom „Spring-ins-Nichts”- verwendest [und das angepasst bei den jeweiligen Optionen]
bevor ich deinen EP weiterlese, tu uns allen bitte einen notwendigen Gefallen:
nutze die Codeformatierung
danke, danach lese ich dann auch gerne den Rest weiter.
greetz André
P.S.: An dem Code lässt sich auf jeden Fall noch vieles Optimieren ;)
edit ah, Formatierung, na gleich mal durchlesen, was er denn von uns mag ^_^
Du kannst auf jeden Fall schon einmal die Hälfte vom „Spring-ins-Nichts”-
goto
weglassen, indem du if %auswahl%==j (goto yes1) else (goto kopieren)
Aloha,
hm, wer kopiert denn, um dann nicht zu drucken? Die Dateien gehören nicht in den Ordner gedruckt, wenn sie nicht gedruckt wurden, ergo würde ich folgendes tun:
greetz André
P.S.: Dieses Codegemale ist der reinste Horror, ehrlich: Wer Optik zum Klicken haben will, sollte VisualBasicScript verwenden, meiner Meinung nach.
hm, wer kopiert denn, um dann nicht zu drucken? Die Dateien gehören nicht in den Ordner gedruckt, wenn sie nicht gedruckt wurden, ergo würde ich folgendes tun:
for /f "delims=" %%a in ('xcopy "X:\auftraege\2011\*.dat" "X:\auftraege\2011\gedruckt" /D') do PRINT /D:"\\ServerName\DruckerName" "%%a"
greetz André
P.S.: Dieses Codegemale ist der reinste Horror, ehrlich: Wer Optik zum Klicken haben will, sollte VisualBasicScript verwenden, meiner Meinung nach.
Aloha,
tu mir bitte einen Gefallen, gib' mal
Wenn du mir allerdings jetzt sagen willst, dass er dennoch alles kopiert, dann würde ich mir Gedanken machen, warum alle Dateien als neuer deklariert werden. (Und auch erst dann wenn dem wirklich so ist, kann man anfangen, extra Daten zu vergleichen)
greetz André
tu mir bitte einen Gefallen, gib' mal
xcopy /?
ein und schau mal, wozu ich den Schalter /D
eingebaut habe.Wenn du mir allerdings jetzt sagen willst, dass er dennoch alles kopiert, dann würde ich mir Gedanken machen, warum alle Dateien als neuer deklariert werden. (Und auch erst dann wenn dem wirklich so ist, kann man anfangen, extra Daten zu vergleichen)
greetz André
Aloha,
edit nö, derzeit nicht, sofern die Dateien selbst nicht in Benutzung sind, sollte da kein Problem sein (die Schleife funktioniert jedenfalls, wobei die Zollzeichen doch wohl überflüssig sind bei der Druckerzuweisung, da
Wie groß sind denn die Dateien im Durchschnitt und wie viele werden pro Durchlauf ca. angefasst?
Mach doch mal
greetz André
edit nö, derzeit nicht, sofern die Dateien selbst nicht in Benutzung sind, sollte da kein Problem sein (die Schleife funktioniert jedenfalls, wobei die Zollzeichen doch wohl überflüssig sind bei der Druckerzuweisung, da
print
wohl generell nur mit Druckerfreigabenamen ohne Leerzeichen klarkommt) ...Wie groß sind denn die Dateien im Durchschnitt und wie viele werden pro Durchlauf ca. angefasst?
Mach doch mal
echo on
und schau' nach, was die cmd denn so erzählt, wo es hängt.greetz André
Und
Habe anstatt PRINT auch schon mal mit copy gespielt, jedoch ebenfalls ohne Erfolg.
Das kann ich mir ...
Mal sehen, habe gerade dringendes immer ist alles dringend ... Zeug auf dem Tisch
greetz André
print
funktioniert? ... erstaunlich, habe noch nie einen Drucker so mit Leerzeichen angesprochen bekommen, selbst wenn Zollzeichen gesetzt waren - nun gut.Habe anstatt PRINT auch schon mal mit copy gespielt, jedoch ebenfalls ohne Erfolg.
Das Problem besteht weiterhin, mit dem hängen. Hintergrund ist, dass er fragt, ob die vorhandenen Dateien im Ordner
"...\gedruckt" überschrieben werden sollen. Genau das sollte doch aber eigentlich der Parameter /D bei xcopy
garnicht hervorrufen, da nur Dateien neueren Datums kopiert werden oder?
bei dieser Ursache natürlich vorstellen - und jaein:"...\gedruckt" überschrieben werden sollen. Genau das sollte doch aber eigentlich der Parameter /D bei xcopy
garnicht hervorrufen, da nur Dateien neueren Datums kopiert werden oder?
/D
dient dazu neuere Dateien zu kopieren, ausgehend davon, dass existierende Dateien nicht neu modifiziert werden oder als neu gesetzt werden, habe ich natürlich /Y
weggelassen ...Ich habe also noch /Y hinzugefügt, womit der Drucker alle DAT-Dateien gedruckt hat, auch die alten.
Hm, nein, an sich nur die neuen, jedoch scheinen schon vorhandene (oder wie du es nennst alte) Dateien in der Quelle ständig als neu gesetzt zu werden (sprich: das Dateidatum ändert sich fortlaufend) ... ich schätze dass der Download der Dateien dafür sorgt, dass sie als neuer bzw modifiziert gelten ...Ich persönlich wäre dankbar über eine Lösung, welche keine Schleife hat, sondern sich einfach nur auf den Dateinahmen bezieht.
Schleife gibt es so oder so, immerhin müssen dann mehrere Dateien verglichen werden.Grund ist, sofern ich richtig liege, dass ja immer wieder alle Dateien heruntergeladen werden,
werden ja so oder so ... ist ja dein Ausgang, mget *dat
... you see?Das xcopy /D funktioniert demnach eben auch nicht so wie es sollte, da er das Dateidatum immer wieder auf den Tag des Herunterladens setzt.
ACK.Beispielhaft wäre eine Lösung welche:
- einfach nur die Dateinamen vergleicht
- wenn Dateiname der selbe ist -> nicht drucken
- wenn Dateiname nicht der selbe ist -> Datei ausdrucken
- einfach nur die Dateinamen vergleicht
- wenn Dateiname der selbe ist -> nicht drucken
- wenn Dateiname nicht der selbe ist -> Datei ausdrucken
Hättest du hier evtl. einen Lösungsvorschlag, bzw. einen Hinweis, wie ich vorgehen könnte.
Ich probiere auch gern selbst, musst also kein fertiges Script hier schreiben. Ein schöner Vorschlag mit evtl. Beispiel
reicht mir ja schon aus.
Ich probiere auch gern selbst, musst also kein fertiges Script hier schreiben. Ein schöner Vorschlag mit evtl. Beispiel
reicht mir ja schon aus.
Mal sehen, habe gerade dringendes immer ist alles dringend ... Zeug auf dem Tisch
greetz André
Aloha,
nun, da ich heute eh kein Mittagessen habe, kommen wir eventuell hier voran:
greetz André
nun, da ich heute eh kein Mittagessen habe, kommen wir eventuell hier voran:
@echo off & setlocal
set "Quelle=X:\auftraege\2011"
set "Ziel=X:\auftraege\2011\gedruckt"
set "Typ=*.dat"
for /f "delims=" %%s in ('dir /b /a-d "%Quelle%\%Typ%"') do (
if not exist "%Ziel%\%%s" move "%Quelle%\%%s" "%Ziel%" && PRINT /D:"\\ServerName\DruckerName" "%Ziel%\%%s"
)
pause
goto :eof
greetz André
Aloha,
erstmal keine Ahnung => Hab Feierabend *gg* bei mir hat die Schleife brav alles gedruckt, was in %%s steckte ...
endlocal geschieht automatisch beim Schließen ...
Vielleicht sind ihm die Datenmengen zu groß, kP - dann eventuell so:
greetz André
erstmal keine Ahnung => Hab Feierabend *gg* bei mir hat die Schleife brav alles gedruckt, was in %%s steckte ...
endlocal geschieht automatisch beim Schließen ...
Vielleicht sind ihm die Datenmengen zu groß, kP - dann eventuell so:
for /f "delims=" %%s in ('dir /b /a-d "%Quelle%\%Typ%"') do call :Ablauf "%%s"
goto :wasdanachgeschehensoll
:Ablauf
if not exist "%Ziel%\%~1" move "%Quelle%\%~1" "%Ziel%"
PRINT /D:"\\ServerName\DruckerName" "%Ziel%\%~1"
goto :eof
greetz André
Aloha,
was du da machst, ist auch totaler ...
Zur Erklärung: Alle Ergebnisse der Schleife werden in der Variable
Durch
In
Wenn er die Sprungmarke nicht aufrufen kann, geschieht natürlich auch kein
greetz André
was du da machst, ist auch totaler ...
call :Ablauf "%%s"
ist ein zusammenhängender Befehl (inklusive Sprungmarke) und da muss weder eine Klammer noch sonst etwas hin, desweiteren solltest du nicht einfach Doppelpunkte löschen, wenn ich sie dir vorgebe ...if Ablauf==Sprungmarke (echo OK) else (echo Befehl nicht gefunden && echo Das Sprungziel Ablauf wurde nicht gefunden.)
> Befehl nicht gefunden
> Das Sprungziel Ablauf wurde nicht gefunden
Zur Erklärung: Alle Ergebnisse der Schleife werden in der Variable
%%s
ausgegeben.Durch
call :Ablauf "%%s"
rufe ich die Sprungmarke :Ablauf
auf mit der Übergabe der Varialbe %%s
, welche mit Zollzeichen übergeben wird, um zusammenhängend bearbeitet zu werden.In
:Ablauf
selber wird aus der Variable %%s
jeweils nacheinander ein Datensatz übergeben und ist dort dann als Parameter %1
definiert, da dieser im Pfad, welcher bereits in Zollzeichen gesetzt ist, eingesetzt wird, setze ich %~1
um überflüssige Zollzeichen zu entfernen, denn sonst hättest du das Ergebnis "X:\auftraege\2011\gedruckt\"FZ_FIRMA_20110510.044507.dat""
was bei XP evtl. ignoriert aber bei Windows 7 zur Fehlermeldung führen wird.Wenn er die Sprungmarke nicht aufrufen kann, geschieht natürlich auch kein
move
oder print
, da dann goto :wasdanachgeschehensoll
direkt im Anschluss greift und %%s
wird in :Ablauf
gar nichts bewirken, da %%s
nicht definiert ist, da die Schleife außerhalb der Bearbeitung liegt.greetz André
Aloha,
da setze ich 20 Pfund Sterling dagegen
Ich habe testweise den Käse von hier nochmal direkt c&p und trotz des, durch die Forumsoftware angehängten, überflüssigen Leerzeichens hinter
:Ablauf
funktioniert der gesamte Aufruf und Ablauf (höhö) so wie es soll: Ohne Fehlermeldung oder Probleme.greetz André
Aloha Biber,
nichtsdestotrotz sollte dann nicht
Hm ...
greetz André
nichtsdestotrotz sollte dann nicht
Das Sprungziel - Ablauf wurde nicht gefunden.
dort stehen, sondernDas Sprungziel - wasdanachgeschehensoll wurde nicht gefunden.
... oder nicht? Und das auch erst nach dem gesamten Durchlauf der Schleife ... (und das würde man auch nur sehen, wenn man die batch im cmd ausführt und nicht per Doppelklick, da diese sich danach einfach schließt ^_^)Hm ...
greetz André
Aloha,
mir ist klar, dass er das bei jeder Datei anzeigt - ist auch logisch.
Du hast jetzt folgende Möglichkeiten:
wo du auch im Nachhinein den Namen am Besten editierst - eventuell sogar alles selber tippst - in dem Glauben, dass durch das c&p etwas nicht funktionieren könnte ...
greetz André
mir ist klar, dass er das bei jeder Datei anzeigt - ist auch logisch.
Du hast jetzt folgende Möglichkeiten:
- Du schreibst das gesamte
DO
noch einmal händisch mit dem:Namendeinerwahl
und ersetzt die Zeile:Ablauf
durch den:Namendeinerwahl
, in dem Glauben, dass die Zeilen korrupt sind oder - Du erstellst eine gänzlich neue Datei mit dem Code, in dem Glauben, dass die aktuelle Batchdatei korrupt ist ...
- Du glaubst, dass der Code falsch ist und erstellst eine neue Datei zum Test mit dem Inhalt:
@echo off & setlocal
set "Quelle=X:\auftraege\2011"
set "Ziel=X:\auftraege\2011\gedruckt"
set "Typ=*.dat"
for /f "delims=" %%s in ('dir /b /a-d "%Quelle%\%Typ%"') do call :Namendeinerwahl "%%s"
pause
goto :eof
:Namendeinerwahl
echo %~1
goto :eof
greetz André
Aloha,
kannst du mal bitte noch etwas tun:
denn ich will jetzt mal sehen wo genau er versucht wieder zu springen, denn scheinbar (wenn ich das richtig sehe) gibt er
(Genau deswegen wollte ich auch erst einmal nur
greetz André
P.S.: Hm, meinen üblichen Sarkasmus habe ich bisher noch gar nicht einfließen lassen aber ja, ich bin ein wenig entnervt, was mich nicht daran hindert, hier eine Lösung zu finden - denn ich mag keine unabgeschlossenen Projekte. die hätte man dann nämlich gleich sein lassen können - time must not be wasted har har
kannst du mal bitte noch etwas tun:
- setze mal
echo on
und zusätzlich - füge
pause
hinter jede Zeile im einzelnen Ablauf ein
denn ich will jetzt mal sehen wo genau er versucht wieder zu springen, denn scheinbar (wenn ich das richtig sehe) gibt er
echo %~1
aus, was bedeutet, dass er bereits in der Sprungmarke sich befindet, mir allerdings schleierhaft ist, wann er jetzt wo wie versucht erneut zu :drucken
zu gehen.(Genau deswegen wollte ich auch erst einmal nur
echo %~1
ohne weiteren Firlefanz, um zu sehen, ob er nicht doch schon springt, was er ja scheinbar tut - aber gut, jetzt sehen wir mit pause
und echos mal rein ^_^)greetz André
P.S.: Hm, meinen üblichen Sarkasmus habe ich bisher noch gar nicht einfließen lassen aber ja, ich bin ein wenig entnervt, was mich nicht daran hindert, hier eine Lösung zu finden - denn ich mag keine unabgeschlossenen Projekte. die hätte man dann nämlich gleich sein lassen können - time must not be wasted har har
echo off... oder moin...
C:\>md C:\script\test\123\
C:\>md C:\script\test\123\gedruckt
C:\>for /l %a in (1,1,9) do echo test>C:\script\test\123\fz_%a.dat
C:\>echo test 1>C:\script\test\123\fz_1.dat
C:\>echo test 1>C:\script\test\123\fz_2.dat
C:\>echo test 1>C:\script\test\123\fz_3.dat
C:\>echo test 1>C:\script\test\123\fz_4.dat
C:\>echo test 1>C:\script\test\123\fz_5.dat
C:\>echo test 1>C:\script\test\123\fz_6.dat
C:\>echo test 1>C:\script\test\123\fz_7.dat
C:\>echo test 1>C:\script\test\123\fz_8.dat
C:\>echo test 1>C:\script\test\123\fz_9.dat
set "Quelle=C:\script\test\123"
set "Ziel=C:\script\test\123\gedruckt"
set "Typ=*.dat"
for /f "delims=" %%s in ('dir /b /a-d "%Quelle%\%Typ%"') do call :drucken "%%s"
pause
goto :eof
:drucken
echo %~1
if not exist "%Ziel%\%~1" move "%Quelle%\%~1" "%Ziel%"
PRINT /D:"\\Server\Druckername" "%Ziel%\%~1" // Den Druckernamen habe ich selbstverständlich eingefügt
goto :eof
C:\>C:\script\test\123\123.cmd
C:\>set "Quelle=C:\script\test\123"
C:\>set "Ziel=C:\script\test\123\gedruckt"
C:\>set "Typ=*.dat"
C:\>for /F "delims=" %s in ('dir /b /a-d "C:\script\test\123\*.dat"') do call :d
rucken "%s"
C:\>call :drucken "fz_1.dat"
C:\>echo fz_1.dat
fz_1.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_1.dat" move "C:\script\test\123
\fz_1.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_1.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>call :drucken "fz_2.dat"
C:\>echo fz_2.dat
fz_2.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_2.dat" move "C:\script\test\123
\fz_2.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_2.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>call :drucken "fz_3.dat"
C:\>echo fz_3.dat
fz_3.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_3.dat" move "C:\script\test\123
\fz_3.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_3.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>call :drucken "fz_4.dat"
C:\>echo fz_4.dat
fz_4.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_4.dat" move "C:\script\test\123
\fz_4.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_4.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>call :drucken "fz_5.dat"
C:\>echo fz_5.dat
fz_5.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_5.dat" move "C:\script\test\123
\fz_5.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_5.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>call :drucken "fz_6.dat"
C:\>echo fz_6.dat
fz_6.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_6.dat" move "C:\script\test\123
\fz_6.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_6.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>call :drucken "fz_7.dat"
C:\>echo fz_7.dat
fz_7.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_7.dat" move "C:\script\test\123
\fz_7.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_7.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>call :drucken "fz_8.dat"
C:\>echo fz_8.dat
fz_8.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_8.dat" move "C:\script\test\123
\fz_8.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_8.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>call :drucken "fz_9.dat"
C:\>echo fz_9.dat
fz_9.dat
C:\>if not exist "C:\script\test\123\gedruckt\fz_9.dat" move "C:\script\test\123
\fz_9.dat" "C:\script\test\123\gedruckt"
C:\>PRINT /D:"\\Server\Druckername" "C:\script\test\123\gedruckt\fz_9.dat"
// Den Druckernamen habe ich selbstverstõndlich eingef³gt
Unzulässige Option - //
C:\>goto :eof
C:\>pause
Drücken Sie eine beliebige Taste . . .
Noch Fragen Kienzle?