Top-Themen

Aktuelle Themen (A bis Z)

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, 7904 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 ..
Ähnliche Inhalte
Windows Netzwerk
Dateien und Ordner verschieben mit Rückfrage
Frage von steftsWindows Netzwerk1 Kommentar

Hallo, in einer Windows Server-Client Umgebung habe ich folgende Anforderung: Dateien und Ordner die auf einem Netzwerk Fileshare liegen, ...

Batch & Shell
Verschieben von Dateien in zugehörige Ordner
Frage von vmihaylovBatch & Shell5 Kommentare

Hallo allerseits! Ich habe in einem Ordner sehr viele Dateien mit Artikelnummern als Namen (z.B. 123456.tiff, 123456.jpg, 215456.jpg,215456,tiff,), die ...

Microsoft
Verschieben von Dateien oder Ordnern verhindern
Tipp von Dye.KehasaMicrosoft6 Kommentare

Jeder Admin kennt das: Hilferuf, weil ein Ordner spurlos verschwunden ist. Praktisch immer, findest sich derselbe dann in einem ...

Batch & Shell
Ordner anhand von Dateinamen erstellen und Dateien in Ordner kopieren
gelöst Frage von getmovingBatch & Shell3 Kommentare

Hallo, ich brauche eine einfache Batch-Datei für Windows, die alle Dateien in einem Ordner bearbeitet. Es sollen alle jpg-Dateien, ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 17 StundenWindows 102 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 18 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.