Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateien auf Grund des Dateinamens in Ordner verschieben

Frage Entwicklung Batch & Shell

Mitglied: kingchris

kingchris (Level 1) - Jetzt verbinden

12.05.2009, aktualisiert 13.05.2009, 7473 Aufrufe, 17 Kommentare

Hallo Leute, ich stöbere nun seit ca 3 Tagen durch die Foren ohne eine Lösung für mein Problem zu finden

folgendes.

in einem Ordner liegen mehrere *.tif Dokumente welche folgende Namensgebung haben:

Kunde YYYY_MM_TT Dokumentenart

sprich

Max Musterman 2009_05_12 Angebot.tif
oder
Max Musterman 2009_05_12 Bestellung.tif

der entsprechende Ordner wird per watchdir überwacht und bei einer Änderung soll dann diese batch gestartet werden.

Was soll diese Batch machen?

die Batch soll die Dateien nach Dokumentenart in die Entsprechenden Ordner verschieben.

ich habe schon verschiedene Lösungsmöglichkeiten getestet, jedoch schaffe ich es einfach nicht die *.tif-Dateien nach "Dokumentenart" zu verschieben bzw. zu selektieren (hab es z.b. schon mit findstr. versucht)

Ich danke jetzt schonmal für die Mühe,

lg
chris
Mitglied: bastla
12.05.2009 um 22:25 Uhr
Hallo kingchris und willkommen im Forum!

Die Dokumentenart solltest Du etwa so in eine Variable bekommen:
for %%i in ("D:\Ordner\*.tif") do for %%a in (%%~ni) do set "DA=%%a"
Das Verschieben könnte (ungetestet) etwa so gehen:
01.
@echo off & setlocal 
02.
set "Basis=D:\Ordner" 
03.
set "Archiv=D:\Archiv" 
04.
 
05.
for %%i in ("%Basis%\*.tif") do call :ProcessFile "%%i" 
06.
goto :eof 
07.
 
08.
:ProcessFile 
09.
for %%a in (%~n1) do set "DA=%%a" 
10.
set "Ziel=%Archiv%\%DA%" 
11.
if not exist "%Ziel%" md "%Ziel%" 
12.
if not exist "%Ziel%\%~nx1" move %1 "%Ziel%" & goto :eof 
13.
echo Die Zieldatei "%Ziel%\%~nx1" existiert bereits! 
14.
goto :eof
Grüße
bastla

[Edit] Überzähliges %-Zeichen in Zeile 12 entfernt und in Zeile 13 hinzugefügt [/Edit]
Bitte warten ..
Mitglied: kingchris
12.05.2009 um 22:36 Uhr
wow schnelle antwort und jetzt schnell mal testen....

hmm scheint noch irgendwas nicht zu gehen,
syntaxfehler. allerdings keine weiteren meldungen

--edit--
ach da gings noch weiter ...
ok nochmals von vorne
--edit2--
keine ändeung. dateien bleiben unangetastet und keine ausgabe in der cmd

müsste es nicht eig. set Basis="D:\Ordner" heisen?
Bitte warten ..
Mitglied: bastla
12.05.2009 um 22:41 Uhr
Hallo kingchris!

Sorry - war etwas zu flott und hatte noch ein %-Zeichen zu viel (bzw in der falschen Zeile ) ...

Grüße
bastla
Bitte warten ..
Mitglied: kingchris
12.05.2009 um 22:51 Uhr
hallo bastla hier mal die CMD ausgabe (bei echo on)

ausgabe der CMD
01.
for %i in ("D:\Ordner/*.tif") do call 
02.
call 
03.
call 
04.
call 
05.
goto :eof
ich habe es mal mit 3 Dateien getestet daher meiner meinung nach die 3 "Calls"
Bitte warten ..
Mitglied: LotPings
12.05.2009 um 23:02 Uhr
Hallo Bastla,

die Dateinamen haben doch Leerzeichen,
dann knallt es in Zeile 09 weil da durch die Tilde keine Quotes mehr sind.

Gruß
LotPings
Bitte warten ..
Mitglied: bastla
12.05.2009 um 23:06 Uhr
@LotPings
Die Leerzeichen brauche ich ja zum Aufteilen (das ist keine "for /f"-Schleife in Zeile 9) ...

@kingchris
Inzwischen getestet, und bei mir klappt das mit Dateinamen nach Deinem Muster - wie sieht denn die vollständige Ausgabe mit einem "echo on" in Zeile 1 aus?

Für die erste Datei wäre das bei mir (die lange Zeile am Ende habe ich zusammengezogen):
D:\>set "Basis=D:\Ordner" 
D:\>set "Archiv=D:\Archiv" 
D:\>for %i in ("D:\Ordner\*.tif") do call :ProcessFile "%i" 
D:\>call :ProcessFile "D:\Ordner\Max Musterman 2009_05_12 Bestellung.tif" 
D:\>for %a in (Max Musterman 2009_05_12 Bestellung) do set "DA=%a" 
D:\>set "DA=Max" 
D:\>set "DA=Musterman" 
D:\>set "DA=2009_05_12" 
D:\>set "DA=Bestellung" 
D:\>set "Ziel=D:\Archiv\Bestellung" 
D:\>if not exist "D:\Archiv\Bestellung" md "D:\Archiv\Bestellung" 
D:\>if not exist "D:\Archiv\Bestellung\Max Musterman 2009_05_12 Bestellung.tif" move "D:\Ordner\Max Musterman 2009_05_12 Bestellung.tif" "D:\Archiv\Bestellung"  & goto :eof
Aus dem CMD-Fenster kopieren geht übrigens sehr einfach, wenn der "Quick-Edit-Modus" (findest Du in den Eigenschaften des CMD-Fensters per Klick auf das "Systemmenü" = linke obere Ecke des Fensters) aktiviert ist - dann kannst Du mit der linken Maustaste Text markieren und mit der rechten kopieren (bzw, wenn nichts markiert ist, einfügen).
Und nein, es soll tatsächlich
set "Basis=D:\Ordner"
heißen (die Anführungszeichen setze ich dann nachher bei der Verwendung der Variablen genau dort, wo ich sie brauche).

Grüße
bastla
Bitte warten ..
Mitglied: kingchris
12.05.2009 um 23:18 Uhr
Hallo bastla,

habe gerade noch ein drittes mal den code durch gelesen und keinen unterschied gefunden.

copy und paste bring allerdings den gewünschten erfolg. ist wohl zu spät heute für mich

funktioniert auf jeden fall einwandfrei.

ich danke für die schnelle und kompetente hilfe!
Bitte warten ..
Mitglied: bastla
12.05.2009 um 23:23 Uhr
Hallo kingchris!

Freut mich, dass es doch geklappt hat.

Nur als Anmerkung zu den Dateinamen: Wenn die Dokumentenart Leerzeichen, Kommata oder Semikolons enthalten sollte, wird der Batch nicht (ordnungsgemäß) funktionieren (da diese Zeichen als Trennzeichen interpretiert werden und dann nur der Teil nach dem letzten Trennzeichen in %DA% stünde) - auch das Leerzeichen vor der Dokumentenart ist wichtig und daher erforderlich (da dort geteilt wird).

Grüße
bastla
Bitte warten ..
Mitglied: kingchris
12.05.2009 um 23:28 Uhr
hallo bastla
danke für den tipp, das wird allerdings nicht vorkommen, da als Dokumenten arten auser Angebot, Bestellung und Auftrag nichts in Frage kommt

wenn es dir nicht allzuviel Mühe macht, könntest du mir das mal aufschlüsseln was da genau passiert?
die Var. "DA" wird ja 4x überschrieben und hält dann den letzen Wert oder?


--edit--
hab meine fehler gefunden.
01.
:ProcessFile "%%i" 
und
01.
& goto :eof 
sind in ne seperate zeile "gerutscht...
komisch was so n zeilenumbruch alles bewirken kann ;)
Bitte warten ..
Mitglied: bastla
12.05.2009 um 23:38 Uhr
Hallo kingchris!
wenn es dir nicht allzuviel Mühe macht, könntest du mir das mal aufschlüsseln was da genau passiert?
die Var. "DA" wird ja 4x überschrieben und hält dann den letzen Wert oder?
So ist es - die enthaltenen Leerzeichen teilen den Dateinamen auf, und mit der "for"-Schleife kommt jeder Teil einmal an die Reihe in die Variable geschrieben zu werden - der letzte Bestandteil (eben die Dokumentenart) bleibt dann schließlich in der Variablen.

Der Rest ist ein wenig Absicherung und vermutlich nachvollziehbar - aber wenn Du doch noch Fragen hast: gerne.

Grüße
bastla
Bitte warten ..
Mitglied: kingchris
12.05.2009 um 23:42 Uhr
Hallo bastla,

ja jetzt lichtet sich so langsam der Batch-Dschungel.
und meine restlichen Fragen ala "Was bewirkt ProcessFile" hat mir dann google noch erklärt.
eigentlich ist es ganz selbst erklärend wenn man weis was man machen muss

danke nochmals für die schnelle hilfe!
Bitte warten ..
Mitglied: LotPings
13.05.2009 um 09:08 Uhr
Zitat von bastla:
@LotPings
Die Leerzeichen brauche ich ja zum Aufteilen (das ist keine "for /f"-Schleife in Zeile 9) ...

Moin bastla,

war wohl gestern Abend nicht auf der Höhe,
sonst hätte ich auch gemerkt das das Vorhaben mit einem Einzeiler lösbar wäre

01.
@for %%A in (Angebot Bestellung Auftrag) DO @Move "D:\Ordner\*%%A.tif"  "D:\Archiv\%%A\"
Gruß
LotPings
Bitte warten ..
Mitglied: kingchris
13.05.2009 um 09:28 Uhr
Hallo Leute,

ich jetzt doch nochmal

habe gerade festegelstellt das ich scheinbar doch einige "Dokumente" habe, welche nicht ganz in dieses System passen z.b. habe ich hier dokumente gefunden die folgende Dateinamen haben

Max_Mustermann 2009_05_13 Bestellung_2
(liegt daran das am selben Tag 2 Bestellungen erfolgt sind.)
die obige lösung verschiebt mir dann allerdings diese Datei in den Ordner "Bestellung_2" sollte allerdings in "Bestellung.

nun hab ich überlegt, ob ich die letzten beiden Zeichen nicht einfach "abschneiden" lasse,. (bah ich aus einem anderen Beitrag von LotPings)

01.
%DA:~0,-2% 
sollte den gewünschten erfolg bringen, nur schneidet er mir ja dann immer alles ab. wie könnte ich das lösen?
es sollen nachher nur die Ordner "Bestellung" "Auftrag" "Angebot" vorhanden sein.

danke schonmal im voraus
Bitte warten ..
Mitglied: LotPings
13.05.2009 um 09:43 Uhr
Mein vorgeschlagener Einzeiler lässt sich da einfach anpassen

01.
@for %%A in (Angebot Bestellung Auftrag) DO @Move "D:\Ordner\*%%A*.tif"  "D:\Archiv\%%A\"
Das er bei jedem Aufruf auch versucht nicht vorhandene Dokumentarten zu verschieben schadet ja nicht.

Gruß
LotPings
Bitte warten ..
Mitglied: kingchris
13.05.2009 um 09:51 Uhr
Hallo LotPings,

copy und paste bring folgendes ergebinss in der CMD

Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Mehrere Dateien können nicht in eine einzelne Datei verschoben werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.


mehr an Ausgabe bringt er in der CMD nicht
Bitte warten ..
Mitglied: LotPings
13.05.2009 um 10:06 Uhr
Hallo kingchris.

Die Fehlermeldung ist normal wenn er nichts findet.
Diese ließe sich mit angehängtem >NUL 2>&1 unterdrücken.

Verschieben sollte er aber korrekt wenn du die Ordner entsprechend deiner Struktur angepasst hast.

Gruß
LotPings
Bitte warten ..
Mitglied: kingchris
13.05.2009 um 10:30 Uhr
Hallo LotPings,

ich sollte die Ordner vielleicht auch erstellen, wenn ich da was rein verschieben will

ok. nun klappt es so wie es soll.

danke für die schnelle Hilfe
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Dateien anhand des Namens in neue Ordner verschieben (17)

Frage von Cookiemonster zum Thema Batch & Shell ...

Batch & Shell
Verschieben von Dateien in zugehörige Ordner (5)

Frage von vmihaylov zum Thema Batch & Shell ...

Windows Netzwerk
Dateien und Ordner verschieben mit Rückfrage (1)

Frage von stefts zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...