Hallo,
mich würde mal interessieren wie Ihr folgendes Problem angehen würdet und warum?
Reicht hier eine einfache Batch oder bringt hier eine Hochsprache wie C++ oder andere einen Vorteil?
Alle Ordner eines Verzeichnisses sollen verschoben werden, aber nur wenn diese entweder vom Vormonat oder älter ist, oder alternativ älter als x Tage ist.
Die Informationen die dazu nötig sind liegen in einer TXT in jeweiligen Ordner.
_Header.txt
Benötigt werden hier das Datum(Monat als Zahl) und der Job Code (und zusätzlich hiervon die ersten beiden Zeichen).
Die Daten sollen nun wie folgt sortiert werden
\Jahr_Monat\erste zwei Zeichen des Job Code\Job Code\zu verschiebender Ordner\
Vor dem verschieben muss geprüft werden ob es den Ordner bereits gibt. Ist dem so, soll nichts gemacht werden. Fehlerhandling wäre aber grundsätzlich auch wünschenswert.
Die Quelle soll danach gelöscht werden.
Zuvor soll vom ganzen Quellordner noch eine Kopie angelegt werden zur Sicherheit.
Da der Job Code nicht nur das Format "XX0000001" haben kann sondern auch "20170215" sein kann muss in diesem Fall anstelle der ersten beiden Zeichen (im Beispiel 20) "MC" verwendet werden.
Dies ist meine Batch Lösung dafür
Es können lokal damit 4000 Ordner mit insg. 16GB und 40.000 Daten in ca. 30 Min kopiert und sortiert werden.
Gruß
Joker
mich würde mal interessieren wie Ihr folgendes Problem angehen würdet und warum?
Reicht hier eine einfache Batch oder bringt hier eine Hochsprache wie C++ oder andere einen Vorteil?
Alle Ordner eines Verzeichnisses sollen verschoben werden, aber nur wenn diese entweder vom Vormonat oder älter ist, oder alternativ älter als x Tage ist.
Die Informationen die dazu nötig sind liegen in einer TXT in jeweiligen Ordner.
_Header.txt
Code:
$$ Version: 01.00
$$ Acquired Name: abc
$$ Acquired Date: 15-Feb-2017
$$ Acquired Time: 13:55:52
$$ Job Code: XX0000001
$$ Task Code:
Benötigt werden hier das Datum(Monat als Zahl) und der Job Code (und zusätzlich hiervon die ersten beiden Zeichen).
Die Daten sollen nun wie folgt sortiert werden
\Jahr_Monat\erste zwei Zeichen des Job Code\Job Code\zu verschiebender Ordner\
Vor dem verschieben muss geprüft werden ob es den Ordner bereits gibt. Ist dem so, soll nichts gemacht werden. Fehlerhandling wäre aber grundsätzlich auch wünschenswert.
Die Quelle soll danach gelöscht werden.
Zuvor soll vom ganzen Quellordner noch eine Kopie angelegt werden zur Sicherheit.
Da der Job Code nicht nur das Format "XX0000001" haben kann sondern auch "20170215" sein kann muss in diesem Fall anstelle der ersten beiden Zeichen (im Beispiel 20) "MC" verwendet werden.
Dies ist meine Batch Lösung dafür
Code:
@echo off &setlocal enabledelayedexpansion
set "src=C:\Batch\Data"
set "dst=C:\Batch\Sort"
set "dstBackup=C:\Batch\Backup"
set "z=%date%"
set "sortdate=%z:~10,4%%z:~4,2%%z:~7,2%"
set /a "w=%z:~10,4%"
set /a "x=%z:~4,2%"
xcopy "%src%\*.*" "%dstBackup%\%sortdate%\" /E/I/K
for /f "tokens=1,5" %%i in ('dir /ad /tc "%src%"^|findstr /rc:"\<<DIR>\>"^|findstr /rvc:"\<\.\.*\>"') do ( ^
for /f "tokens=4" %%k in ('findstr /l "Job Code:" %src%\%%j\_Header.txt') do ( ^
for /f "tokens=4" %%l in ('findstr /c:"Acquired Date:" %src%\%%j\_Header.txt') do ( ^
for /f "tokens=1,2,3 delims=-" %%m in ("%%l") do ( ^
if %%n==Jan set /a n=1
if %%n==Feb set /a n=2
if %%n==Mar set /a n=3
if %%n==Apr set /a n=4
if %%n==May set /a n=5
if %%n==Jun set /a n=6
if %%n==Jul set /a n=7
if %%n==Aug set /a n=8
if %%n==Sep set /a n=9
if %%n==Oct set /a n=10
if %%n==Nov set /a n=11
if %%n==Dec set /a n=12
set /a "o=%%o"
if %x% GTR !n! (set v=1) else if %w% GTR !o! (set V=1) else (set v=2))
set k2=%%k
set k2=!k2:20=MC!
set k3=!k2:~0,2!
if !v!==1 (
if NOT exist "%dst%\!o!_!n!\!k3!\%%k\%%j\_Header.txt" set y=1
if !y!==1 2>nul md "%dst%\!o!_!n!\!k3!\%%k\%%j\"
if !y!==1 move "%src%\%%j\*.*" "%dst%\!o!_!n!\!k3!\%%k\%%j\"
if !y!==1 del "%src%\%%j\*.*" /s/q
if !y!==1 rmdir "%src%\%%j\"
)
)
)
)
)
Es können lokal damit 4000 Ordner mit insg. 16GB und 40.000 Daten in ca. 30 Min kopiert und sortiert werden.
Gruß
Joker
Zuletzt bearbeitet: