
43964
18.12.2007, aktualisiert um 15:29:56 Uhr
Batch- Dateien in Ordner verschieben
Hallo,
folgendes Problem:
Ich erhalte täglich neue Dokumente in einen Ordner (z.B: C:\Dokumente\). Diese Dokumente beeinhalten u.a. eine 4stellige Zahlenkombination (0000 bis 9999). Anhand dieser Zahlenkombination sollen die Dokumente in den Passenden Ordner geschoben werden. Also "xyz-0000-abcd.pdf" in den Ordner C:\Dokumente\0000\).
Der Ordner C:\Dokumente\ soll danach wieder leer sein und alle Dokumente in den Unterordnern sein.
Das Kopieren bzw. Verschieben soll einmal täglich als Job auf einem Server2003 laufen.
Wie würde der Inhalt einer Batchdatei aussehen?
Vielen Dank.
folgendes Problem:
Ich erhalte täglich neue Dokumente in einen Ordner (z.B: C:\Dokumente\). Diese Dokumente beeinhalten u.a. eine 4stellige Zahlenkombination (0000 bis 9999). Anhand dieser Zahlenkombination sollen die Dokumente in den Passenden Ordner geschoben werden. Also "xyz-0000-abcd.pdf" in den Ordner C:\Dokumente\0000\).
Der Ordner C:\Dokumente\ soll danach wieder leer sein und alle Dokumente in den Unterordnern sein.
Das Kopieren bzw. Verschieben soll einmal täglich als Job auf einem Server2003 laufen.
Wie würde der Inhalt einer Batchdatei aussehen?
Vielen Dank.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 76228
Url: https://administrator.de/forum/batch-dateien-in-ordner-verschieben-76228.html
Ausgedruckt am: 11.04.2025 um 22:04 Uhr
9 Kommentare
Neuester Kommentar
Moin Schwimmbutz,
okay, dann wäre es je nach Strategie entweder ein Oneliner oder ein Einzeiler vom CMD-Prompt.
Entweder du wählst den Weg "Ich gehe alle vorhandenen Zielordner durch, denn ich will nicht, dass automatisch neue Ordner angelgt werden bei neuen Dateinamen in der Pipeline"...
-oder Du gehst über alle Dateien im Sammel-Ordner und kopierst alle, die noch nicht in den Schubladen 0001....9999 vorhanden sind.
Dazu könntest Du eine FOR /L-Anweisung von 10001....19999 laufen lassen und daraus die "0001" bis "9999"-Teilstrings erzeugen.
Aber vorher (er-)klär noch mal bitte, wie es mit COPY oder MOVE/ überschreiben/ersetzen/überspringen aussieht.
Grüße
Biber
okay, dann wäre es je nach Strategie entweder ein Oneliner oder ein Einzeiler vom CMD-Prompt.
Entweder du wählst den Weg "Ich gehe alle vorhandenen Zielordner durch, denn ich will nicht, dass automatisch neue Ordner angelgt werden bei neuen Dateinamen in der Pipeline"...
>for /d %i in ("c:\dokumente\????") do if exist "*%~nxi*.pdf" ECHO move "*%~nxi*.pdf" "%i\*.*
-oder Du gehst über alle Dateien im Sammel-Ordner und kopierst alle, die noch nicht in den Schubladen 0001....9999 vorhanden sind.
Dazu könntest Du eine FOR /L-Anweisung von 10001....19999 laufen lassen und daraus die "0001" bis "9999"-Teilstrings erzeugen.
Aber vorher (er-)klär noch mal bitte, wie es mit COPY oder MOVE/ überschreiben/ersetzen/überspringen aussieht.
Grüße
Biber
Moin Schwimmbutz,
Ansonsten sollte es so passen.
Und natürlich bedeutet diese Strategie, dass diese Zeile IMMER für alle 9999 Ordner (falls es alle gibt) prüft, ob eine für diesen Ordner passende Datei rumliegt.
Auch wenn nur eine einzige oder gar keine Datei wartet.
Grüße
Biber
Kann ich deine oben eingerahmte Zeile so übernehmen?
Im Prinzip ja... aber:- Das "ECHO " kann und sollte nach dem Testen natürlich raus.
- überall, wo jetzt ein Prozentzeichen steht, müssen es im Batch deren zwei werden.
- und da, wo bisher (2x) "*%~nxi*.pdf" steht, sollte jeweils "x:\SammelDir\*%~nxi*.pdf" stehen.
Ansonsten sollte es so passen.
Und natürlich bedeutet diese Strategie, dass diese Zeile IMMER für alle 9999 Ordner (falls es alle gibt) prüft, ob eine für diesen Ordner passende Datei rumliegt.
Auch wenn nur eine einzige oder gar keine Datei wartet.
Grüße
Biber
Hallo Schwimmbutz,
probiere es einmal hiermit:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set /a zaehler=1
set input=C:\DOKUMENTE\*.PDF
@for %%f in (%input%) do if "%%f"=="%%f" (
set file=%%f
set KdNr=!file:~14,4!
echo Nr. !zaehler! und File = %%f und Kundenummer = !KdNr!
if not exist c:\dokumente\!KdNr!\. md c:\dokumente\!KdNr!
if exist c:\dokumente\!KdNr! copy %%f c:\dokumente\!KdNr!
set /a zaehler+=1
del /q %%f
) ELSE (
echo.
)
pause
Falls die Kundenummer (Verzeichnis) noch nicht existiert, wird das Verzeichnis angelegt.
PS: Ist aber eine Quick and Dirty Lösung.
Gruß
Stefan
probiere es einmal hiermit:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set /a zaehler=1
set input=C:\DOKUMENTE\*.PDF
@for %%f in (%input%) do if "%%f"=="%%f" (
set file=%%f
set KdNr=!file:~14,4!
echo Nr. !zaehler! und File = %%f und Kundenummer = !KdNr!
if not exist c:\dokumente\!KdNr!\. md c:\dokumente\!KdNr!
if exist c:\dokumente\!KdNr! copy %%f c:\dokumente\!KdNr!
set /a zaehler+=1
del /q %%f
) ELSE (
echo.
)
pause
Falls die Kundenummer (Verzeichnis) noch nicht existiert, wird das Verzeichnis angelegt.
PS: Ist aber eine Quick and Dirty Lösung.
Gruß
Stefan
Du musst
set KdNr=!file:~14,4!
ändern. Es werden ab Stelle 14 für die Kundenunmmer 4 Stellen extrahiert. Du musst aber beachten, dass der Pfadname (C:\DOKUMENTE\9000.PDF) mitgezählt wird. Das heist, im Moment gehe ich davon aus, dass die Dokumente alle mit der Kundenummer (!file:~14,4!)beginnen (9000-blabla.PDF). Sollte der Dateinamen umgekehrt sein blabla9000.pdf dann ist !file:~20,4!. Die Kundennummer im Filenamen muss aber immer an der gleichen Stelle stehen.
Gruß
Stefan
set KdNr=!file:~14,4!
ändern. Es werden ab Stelle 14 für die Kundenunmmer 4 Stellen extrahiert. Du musst aber beachten, dass der Pfadname (C:\DOKUMENTE\9000.PDF) mitgezählt wird. Das heist, im Moment gehe ich davon aus, dass die Dokumente alle mit der Kundenummer (!file:~14,4!)beginnen (9000-blabla.PDF). Sollte der Dateinamen umgekehrt sein blabla9000.pdf dann ist !file:~20,4!. Die Kundennummer im Filenamen muss aber immer an der gleichen Stelle stehen.
Gruß
Stefan