1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Kann das Windows Script??

Discussion in 'Windows XP / Server 2003/2008 / Vista' started by silverserver, Sep 6, 2005.

Thread Status:
Not open for further replies.
  1. Hi,

    Wir müssen Farbseparationen in Form von TIFFs von einem Server zum anderen verschieben.
    Die Besonderheit dabei ist allerdings...
    Dabei dürfen keine versprengten Dateien im Zielordner stehen bleiben.
    Wenn also eine aktuellere Version einer Graphik (bei einer 5 färbigen Graphik wären das also 5 TIFFs) in den Zielordner verschoben werden soll, können wir die Überschreibfunktion von Windows leider nicht nutzen, da sich oftmals die Dateinamen einzelener TIFFs ändern und somit nicht alle alten Files überschrieben werden würden.
    Die Dateinamen haben in den ersten 8 Stellen immer das gleiche Muster, danach sind sie total unterschiedlich.
    Lösung wäre also:
    Ein Script, das die ersten 8 Zeichen aller Filenames des Startordners mit den ersten 8 Zeichen aller Files des Zielordners vergleicht. Wenn Übereinstimmungen vorkommen, werden jene aus dem Zielordner gelöscht.
    Nach Abschluss des Löschvorgangs, werden dann alle Files vom Startordner in den Zielordner verschoben.
    Fertig.

    Da ich nur Operator bin und mich programmiertechnisch nicht so gut auskenne, hoffe ich auf Eure Hilfe!!

    Herzlichen Dank,
    silverserver
     
  2. Michi0815

    Michi0815 Guest

    Verschiebe.bat:
    Code:
    @echo off
    
    :: ***Zielordner; entsprechend anpassen***
    set destpath=x:\
    
    :: ***Hilfsvariablen***
    set sourcepath=%~dp1
    set name=%~n1
    set appendix=%~x1
    set setname=%name:~0,8%
    
    :: ***Bereits existierende Dateien löschen***
    del /F /Q %destpath%%setname%*%appendix%
    
    :: ***Dateien verschieben***
    move %sourcepath%%setname%*%appendix% %destpath%
    
    :: ***Aufräumen***
    set destpath=
    set sourcepath=
    set name=
    set appendix=
    set setname=
    
    aufruf entweder in der konsole über "verschiebe <Dateiname.tiff>" oder über eine option im kontextmenü...
     
  3. Hi Michi,

    Danke für Deine rasche Antwort!
    Leichte troubles habe ich allerdings noch mit Deinem Script...

    @echo off

    :: ***Zielordner; entsprechend anpassen***
    set destpath=x:\ Hier kommt der Zielordner rein

    :: ***Hilfsvariablen***
    set sourcepath=%~dp1 kommt hier was rein?
    set name=%~n1 kommt hier was rein?
    set appendix=%~x1 kommt hier was rein?
    set setname=%name:~0,8% kommt hier was rein?

    :: ***Bereits existierende Dateien löschen***
    del /F /Q %destpath%%setname%*%appendix%

    :: ***Dateien verschieben***
    move %sourcepath%%setname%*%appendix% %destpath%

    :: ***Aufräumen***
    set destpath= Zielordner
    set sourcepath= Quellordner
    set name= ???
    set appendix= ???
    set setname= ???



    Musst das entschuldigen, habe noch nie programmiert, bzw. kompliziertere Scripts geschrieben.

    Beesten Gruß & danke,
    Martin
     
  4. Michi0815

    Michi0815 Guest

    du musst nur die variable "destpath" in der 3. zeile anpassen. alles andere ist schon ok so wie es ist.

    im hilfsvariablen-block wird der übergebene Dateiname in seine bestandteile zerlegt. in "sourcepath" steht laufwerk und pfad der tiff's, in "name" ist der (vollständige) name einer tiff gespeichert, "appendix" enthält die dateiendung. "setname" enthält die ersten 8 zeichen des namens der übergebenen .tiff-datei (und damit den namen vom set aller .tiff's)

    im block aufräumen werden nur die ganzen variablen wieder geleert/gelöscht. reine hygienemassnahme...
     
  5. Problem ist, daß sich die Dateinamen der Tiffs täglich ändern und auch bei jedem Kopiervorgang unterschiedliche Tiffs vorhanden sind. Nur der Aufbau des Dateinamens ist gleich. z.B.:
    50_18623_K.tif
    50_18623_457.tif
    50_18623_185.tif
    35_27223_624.tif
    35_27223_Y.tif
    etc....
    Nur die ersten 8 Zeichen haben immer die gleiche Konvention.
    Man müsste also eine Liste der Dateinamen des Sourcefolders ziehen und daraus nur die ersten 8 Zeichen/Dateiname nehmen.
    Gleiches macht man mit dem Destinationfolder.
    Dann die Listen vergleichen und bei Übereinstimmungen die betroffenen files aus dem Destinationfolder löschen.
    Dann erst die Verschiebung vornehmen.

    Oder hat Du eine bessere Idee?
    besten Gruß,
    Martin
     
  6. Michi0815

    Michi0815 Guest

    das mit den ersten 8 zeichen ist klar - und das macht das script auch sowohl im quell- als auch im zielordner (daher auch der setname).

    nur...
    wie ist das mit dem zielordner; ist der immer gleich oder ist der auch "dateiabhängig"?
     
  7. Zielordner ist konstant immer der selbe.
    Es wird alles in einen Pot auf die gleiche Ebene geworfen.

    LG
    Martin
     
  8. Habe Dir einen Screenshot der Shell beigefügt!

    LG
    Martin
     

    Attached Files:

  9. Michi0815

    Michi0815 Guest

    ich denke da habe ich etwas falsch verstanden ;)
    das script kann/soll nicht einfach so gestartet werden: es erwartet einen dateinamen als parameter...

    du willst z.b. 1x am tag das script anstoßen und es soll dann alle dateien-sätze (möglicherweise über mehrere verzeichnisse hinweg) abgleichen?
    wenn ja, dann lass mich da mal drüber nachdenken; ist etwas komplizierter.
     
  10. Genau, das Script wird nachts per Taskplaner gestartet und soll die Files rüberkopieren.
    Die Beiden Ordner, Source und Destination, bleiben aber immer gleich.
    Wir schaufeln nur von einem fixen Standort zum anderen fixen Standort.
    Schwierig ist allein der Vergleich der beiden Inhalte nach den ersten 8 Zeichen der Filenames und das Löschen aller files aus dem Zielordner, deren Filename in den ersten acht Zeichen gleich ist mit einem der Files im SourceOrdner.

    Hoffe, ich halse Dir hier nicht zu viel Aufwand auf... :o

    LG
    Martin
     
  11. Mylin

    Mylin Viertel Gigabyte

    Hallo silverserver,

    betrachte mal dieses kleine PC-Welt-Toll.
    http://www.pcwelt.de/downloads/pcwelt_tools/tools/106412/index.html

    Wenn ich (nach einem kleinen Test) die Funktion richtig interpretiert habe sollte es deinen Wünschen entsprechen.

    Beispiel:
    Im Quellordner Dateien 1234, 1235, 1236, 1237 vorhanden.
    Im Zielordner Dateien 1231, 1232, 1233, 1237 vorhanden.

    1234, 1235, 1236 werden in den Zielordner kopiert.
    1231, 1232, 1233 werden gelöscht.
    1237 bleibt bestehen.
     
  12. Michi0815

    Michi0815 Guest

    nur noch mal zur sicherheit: wenn das set "abcdefgh" von A nach B verschoben werden soll, dann müssen ALLE dateien in B gelöscht/überschrieben werden die mit "abcdefgh" beginnen. weiters sollen alle sets in B, die in A nicht existieren, erhalten bleiben.

    teste mal das:
    Code:
    @echo off
    if %1.==. goto main
    
    :: //////////////////////////////////////////////
    :: //////////        Procedure         //////////
    :: //////////  Verschieben eines Sets  //////////
    :: //////////////////////////////////////////////
    
    if NOT EXIST %1 goto filefin
    
    :: Hilfsvariablen; nicht verändern
    set name=%~n1
    set appendix=%~x1
    set setname=%name:~0,8%
    
    :: Bereits existierende Dateien eines Sets im Zielordner 
    :: löschen und die neuen Dateien verschieben
    echo Verschiebe %setname%[..]%appendix%
    for %%f in ("%destpath%%setname%*%appendix%") do del "%%f" > nul
    for %%f in ("%sourcepath%%setname%*%appendix%") do move "%%f" "%destpath%" > nul
    
    goto filefin
    
    :: //////////////////////////////////////////////
    :: //////////      Hauptprogramm       //////////
    :: //////////     Suchen der Sets      //////////
    :: //////////////////////////////////////////////
    
    :main
    
    :: Zielordner; ***entsprechend anpassen!***
    set destpath="D:\test\dest\"
    :: Quellordner; ***entsprechend anpassen!***
    set sourcepath="D:\test\sour\"
    
    :: Dateien im Quellverzeichnis suchen
    for %%f in ("%sourcepath%*") do call %0 "%%f"
    
    :: ***Aufräumen***
    set destpath=
    set sourcepath=
    set name=
    set appendix=
    set setname=
    
    :filefin
    
     
  13. @MYLIN:

    Funzt so leider nicht...
    Das Tool ist zum Synchronisieren gemacht.
    Wenn ich synchrinisiere, lösche ich mir das gesamte Archiv (Destinationfolder) leer, weil immer nur eine kleine Menge vom Quellordner(=Zwischendepot) zum Zielordner(Archiv) kopiert wird.
    Trotzdem danke!
     
  14. Werd es gleich mal durchchecken, Danke!
     
  15. Der erste Versuch sah echt gut aus :jump:

    Werde morgen ein besseres Testumfeld einrichten und Dir dann bescheid geben, wie es gelaufen ist!

    Wenn alles hinhaut, erzähl ich Dir auch, wofür Du hier etwas unglaublich wichtiges geschrieben hast...

    Danke & schönen Abend noch,
    Martin
     
  16. Hi Michi,

    Sorry, daß ich mich so lange nicht gemeldet hab, hatte einiges zu tun und zu weiteren Tests bin ich erst heute gekommen...

    Bis jetzt hat Dein Script jeden Test bestanden! :D

    Werde mir das Script nochmals genau durchnehmen und noch weitere Tests durchführen. Ich möchte auch wirklich alles verstehen, was hier passiert.
    Ich hoffe, ich darf mich dann noch mals an Dich wenden, wenn Unklarheiten aufkommen...?

    Beste Grüße,
    Martin
     
  17. Hello!!

    Möchte mich in aller Form und mit Respekt bei Dir bedanken!
    :bet:
    Dein Script, welches Du so aus dem Handgelenk geschüttelt hast, ist, wie es scheint, die optimale Lösung für uns!
    Für jemanden, wie Dich mag es eine Kleinigkeit sein, für meiner einer schien es ein sehr schwieriges Projektchen zu werden, das ich innerhalb des vorgesehenen Zeitrahmens nie zu Stande gebracht hätte.
    Du hast mitgeholfen, ein hochwertiges Kontrollprogramm in unserem System und unseren Arbeitsablauf zu integrieren (Firma= weltweiter Marktführer). Dies war nun noch der finale Schritt, die Archivierung und Aktualisierung der Daten zu automatisieren.
    Einfach, aber effizient!

    Lieber Michi, herzlichen Dank für Deine Mithilfe!
    NOTE: 1A mit Auszeichnung

    ;)
     
  18. Michi0815

    Michi0815 Guest

    freut mich dass es funktioniert. :D
     
Thread Status:
Not open for further replies.

Share This Page