madhias
Goto Top

Ordner Suchen und Verschieben Script

Hallo allerseits,

Ich würde gerne ein Script basteln, welches Ordner mit bestimmten Namen in der gleichen Hierarchie auf andere Netzwerkfreigabe verschiebt. Wie bzw. womit soll ich beginnen - z.B. PowerShell? Das ist meine erste Frage. Ich habe mir ein paar Tutorials durchgelesen, und mir kommt vor, für diese Aufgabe schieße ich da mit Kanonen auf Spatzen. Vielleicht liege ich ja falsch =] Vielleicht tut es ja auch ein normales Batch Script.

Die Ordner sind numeriert sortiert in 100er Schritten, dann 1000er, dann 10000er:

Freigabe1 \ 10000 \ 10000-10099 \ 100xx \ OrdnerZ
Freigabe1 \ 11000 \ 11000-11099 \ 110xx \ OrdnerZ
usw.

Nun soll der OrdnerZ (welcher aber nicht immer da sein muß) in die Freigabe2 verschoben werden, also:

Freigabe2 \ 10000 \ 10000-10099 \ 100xx \ OrdnerZ
Freigabe2 \ 11000 \ 11000-11099 \ 110xx \ OrdnerZ
usw.

Vielleicht hat ja wer ein paar Denkanstöße, die mir weiterhelfen!

Besten Dank und Grüße, Matthias

Content-ID: 201649

Url: https://administrator.de/contentid/201649

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

colinardo
colinardo 13.02.2013 aktualisiert um 13:13:31 Uhr
Goto Top
Hi madhias,

via Batch kannst du folgendes machen:
Am Anfang noch die Variablen an deine Umgebung anpassen.
Variablen:
ordername = Den suchst du
searchroot = Ab diesem Ordner suchst du
serverfreigabe = Selbsterklärend
@echo off & setlocal ENABLEDELAYEDEXPANSION
set ordnername=diverses
set searchroot=C:\temp
set serverfreigabe=\\fritz.box\fritz.nas

for /f "tokens=*" %%i IN ('dir /b /s /A:D "%searchroot%" ^| findstr /E "%ordnername%"') DO @(  
         set p=%%i
	 set newPath=!serverfreigabe!\!p:~3%!\
	 xcopy  "!p!" "!newpath!" /s /e /c /i /h /r /k /o /y  
)

Grüße Uwe
bastla
bastla 13.02.2013 aktualisiert um 13:14:32 Uhr
Goto Top
Hallo madhias und willkommen im Forum!

Sollte sich als Batch ungetestet etwa so machen lassen (als serverseitige Variante - wenn Du Quelle und Ziel als UNC-Pfad schreibst, sollte sich das auch vom Client aus verwenden lassen):
@echo off & setlocal
set "Quelle=D:\Freigabe1"  
set "Ziel=D:\Freigabe2"  
set "Ordner=OrdnerZ"  

for /f "delims=" %%i in ('dir /s/b/ad "%Quelle%\%Ordner%"') do call :ProcessDir "%%i"  
goto :eof

:ProcessDir
set "ZielPfad=%~f1"  
call set "ZielPfad=%%ZielPfad:%Quelle%=%Ziel%%%"  
md "%Zielpfad%" 2>nul  
xcopy /dey %1 "%Zielpfad%\" >nul && echo rd /s /q %1  
goto :eof
Es werden (wegen des "echo" vor dem "rd") in dieser Version zwar der neue Ordner erstellt und die Inhalte kopiert, aber der alte Ordner nicht gelöscht - wenn es passt, einfach dieses "echo" entfernen ...

Grüße
bastla

[Edit]
@ colinardo: Da hatten wir ja ziemlich ähnliche Ideen - wobei ich zur Sicherheit auch einen leeren "OrdnerZ" verschiebe.
Bei Dir würde dafür auch zB ein "Weiterer OrdnerZ" mit behandelt ...
[/Edit]
madhias
madhias 19.02.2013 um 16:23:13 Uhr
Goto Top
Hallo colinardo & bastla,

Besten Dank für die Tips! Das bastla Script habe so einmal eingerichtet und getestet, und funktioniert einwandfrei!

Viele Grüße, Matthias