Zum Inhalt wechseln


Foto

Batchdatei zum Umbennen und Verschieben einer Datei auf ein Netzlaufwerk


  • Bitte melde dich an um zu Antworten
6 Antworten in diesem Thema

#1 Andreas91

Andreas91

    Newbie

  • 2 Beiträge

 

Geschrieben 03. September 2017 - 18:07

Hallo zusammen,

 

ich bin neu hier und ich hoffe ihr könnt mir weiterhelfen.

 

Kurz zur Ausgangssituation:

Ich habe an der Arbeit ein Messgerät, welches automatisch Dateien (ohne Dateiendung) mit Messergebnissen auf ein Netzlaufwerk 1 abspeichert.

Nun möchte ich von einem Rechner aus diese Dateien vom Netzlaufwerk 1 auf ein Netzlaufwerk 2 kopieren, da diese Dateien von dort aus weiterverarbeitet werden.

Zuvor muss allerdings noch die Endung der Datei auf .xyz (beispielhaft) geändert werden.

Dies alles soll mithilfe einer Batchdatei erfolgen, welche dann automatisch einmal pro Stunde ausgeführt werden soll.

 

Leider kann das Messgerät die Daten nicht direkt im richtigen Format abspeichern und aufgrund fehlender Rechte nicht auf dem Netzlaufwerk 2 abspeichern.

 

Ich habe auch schon angefangen die Batchdatei zu erstellen: 

 

@echo off
net use Z: \\Netzlaufwerk2 /user:USER2 PASSWORT2
dir "\\Netzlaufwerk1\Unterordner\*.dat" /B /S >Liste.txt
for /f "delims=" %%i in (Liste.txt) do (ren "%%i" "*.xyz")
for /f "delims=" %%j in ('dir /s /b /a-d "\\Ntzlaufwerk1\Unterordner\*.xyz"') do move "%%j" "\\Netzlaufwerk2">nul

 

 

Allerdings funktioniert das nicht und ich habe davon nur wenig Ahnung und hoffe somit auf eure Unterstützung.
 

Vielen Dank schon mal im Voraus.

 

Andreas



#2 NilsK

NilsK

    Expert Member

  • 12.395 Beiträge

 

Geschrieben 03. September 2017 - 19:15

Moin,

 

was genau funktioniert denn nicht? Wir helfen dir gern, aber ein bisschen mehr Information brauchen wir schon.

 

Prinzipiell würde ich nicht mit zwei Schleifen arbeiten, sondern mit einer. Dort könnte für jede Datei ein Kopierbefehl stehen, der die Datei mit dem "falschen" Namen unter "richtigem" Namen am Ziel ablegt. Ein zweiter Schritt in derselben Schleife löscht dann das Original.

 

Außerdem würde ich Ausgaben erst dann unterdrücken (>nul), wenn alles läuft. Bis dahin sind Fehlermeldungen ja vielleicht ganz hilfreich.

 

Und schließlich wäre es besser, wenn dein Skript gleich mit dem passenden User ausgeführt wird. Damit musst du dann das Kennwort nicht im Klartext im Batchcode hinterlegen, wo es nicht hingehört.

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#3 Andreas91

Andreas91

    Newbie

  • 2 Beiträge

 

Geschrieben 03. September 2017 - 20:13

Hallo Nils,

 

vielen Dank für deine schnelle Antwort.

 

Zum Punkt was nicht genau funktioniert:

Momentan habe ich das Problem, dass zwar die originalen Dateien umbenannt werden, allerdings nicht ins Ziellaufwerk kopiert werden.

 

Da beim Ziellaufwerk Benutzername und Kennwort verlangt werden, habe ich das auf die oben dargestellte Variante versucht. Dies klappt aber nicht.

Ob Benutzername und Kennwort nun im Skript stehen oder nicht ist eigentlich egal, da an diese Datei niemand anderes etwas ändern wird, sobald diese funktioniert.

 

Wie gesagt, ich habe leider nicht sehr viel Ahnung von Batch-Dateien und sollte das "nur mal schnell" nebenbei schreiben :/

 

Meine Frage im Allgemeinen lautet daher:

Ist der Ansatz schon gut so oder kann man das ganze vielleicht doch noch viel kürzer und einfacher schreiben?

 

Gruß



#4 mba

mba

    Board Veteran

  • 873 Beiträge

 

Geschrieben 03. September 2017 - 20:18

Wenn es in der Aufgabenplanung laufen soll verwende UNC-Pfade

ohne das z: bei net use

 

Was passiert wenn Du den Net use in einer cmd ausführst?

Kannst Du eine Datei via copy in Ziel kopieren? 


Bearbeitet von mba, 03. September 2017 - 20:25.


#5 lefg

lefg

    Expert Member

  • 20.495 Beiträge

 

Geschrieben 04. September 2017 - 05:51

Moin

 

Versuchsweise setzte ich wohl echo anstelle move ein und liesse auch Netzlaufwerk und Unterdrückung weg, setzte Pause dazu für die schrittweise Ausführung dazu

 

 

or /f "delims=" %%j in ('dir /s /b /a-d "\\Ntzlaufwerk1\Unterordner\*.xyz"') do echo "%%j" & pause

 

Dann sähe ich, ob der Parameterstring richtig ist. Dabei beachtete ich, ob es ein nicht sichtbares Leerzeichen am Ende gäbe.


Bearbeitet von lefg, 04. September 2017 - 08:18.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#6 Dr.Melzer

Dr.Melzer

    Moderator

  • 26.261 Beiträge

 

Geschrieben 04. September 2017 - 06:08

Da beim Ziellaufwerk Benutzername und Kennwort verlangt werden, habe ich das auf die oben dargestellte Variante versucht.

Welche Rechte hat denn der Benutzer unter dessen Account du das Script ausführst auf dem Ziellaufwerk?

 

Vielleicht wäre es einfacher und besser dem User mit dem das Script ausgeführt wird die entsprechenden rechte auf dem Ziellaufwerk einzurichten. Dann fällt der Punkt mit dem Passwort im Klartext in der Batch Datei schon mal weg.


Never argue with an idíot, they drag you down to their level and beat you with experience!

#7 Doso

Doso

    Board Veteran

  • 2.488 Beiträge

 

Geschrieben 17. September 2017 - 13:46

Verzichte auf das net use. das macht spätestens bei der Autmatisierung per Task Scheduler Probleme. Weiterhin würde ich das mit Powershell machen, da ist das alles irgendwie hübscher.