zwiebelmax
Goto Top

speziell nummerierte Ordner in andere nummerierte Ordner verschieben

<s>HIIIILFEEEEE!!!</s>--->[Edit] Nicht nötig bei uns. MfG Biber[/Edit]

ich brauch ganz dringend die Hilfe von jemandem der sich mit Batches auskennt, ich hab nämlich noch nie was damit gem8, bin also ein volln00b in diesem Bereich -.-

bin Azubi und soll ein Archiv erstellen, unter anderem müsste ich tausende Nummerierte Ordner (F1K1,F2K1, F3K1) in andere Ordner (Filiale_1, Filiale_2, Filiale_3) verschieben, wobei ich die letzteren Ordner erst erstellen müsste, wenn ich das alles per Hand machen muss sterbe ich an Hirntod!

ich habe auch schon ähnliche threads gefunden, aber da ich wie gesagt ein absoluter noob bin hab ichs nich hinbekommen -.-

beispiel Problemstellung

F1K1
F1K2
F1K3
F2K1
F2K3
F4K99

alle Ordner mit F1 (Filiale1) am anfang müssen in einen Ordner Filiale_1 abgelegt werden, also ist nur die Zahl nach dem F relevant, und dann halt dieses prinzip beibehalten, alle F2K... in Filiale_2 Ordner usw, (es geht nicht unbedingt im alphabet, damit meine ich dass es durchaus sein kann dass nach F3Kirgendwas F6Kirgendwas kommt, die dann in die Ordner Filiale_3 und Filiale_6 verschoben werden müssten (und vorher müssten wie schon gesagt die Ordner Filiale_3 und Filiale_6 erstellt werden)


also hier nochmal ne konkrete Bauanleitung für das was ich suche:
der batch muss einen ordner für jede verschiedene Zahl nach dem F bei z.B. F3K1 anlegen und dann alle F3K* Ordner in diesen Ordner (bei diesem beispiel wäre es der Ordner Filiale_3) verschieben, also würden bei dem batch ganz viele Filiale_* ordner erstellt werden und dann die F*K* Ordner geordnet darein verschoben werden ...


wäre nett wenn sich jemand erbarmen würde .... er kann dann von sich behaupten er hätte ein Leben gerettet ;)
uund es wäre auch net das ganze wenn möglich ein kleinwenig zu kommentieren, dann könnte ich das ganze bei gegebenheit auf andere sachen umändern, wäre sehr hilfreich ... dankeschööön

Content-Key: 26041

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

Printed on: April 19, 2024 at 11:04 o'clock

Member: Janni
Janni Feb 15, 2006 at 10:03:43 (UTC)
Goto Top
Etwas anderer Lösungsvorschlag: einfach nach F1* suchen, alle markieren und verschieben, nach F2* suchen, etc. -> fertig in zwei Minuten.

MFG
Member: ZwiebelMax
ZwiebelMax Feb 15, 2006 at 10:57:45 (UTC)
Goto Top
das ist ja genau das was ich im moment mache, nur dass es sehr viel mehr ordner sind, ich wollte da einfach nen batch laufen lassen der das alles einsortiert, denn es sind glaube ich zum schluss so um die 2000 ordner die in diese Filiale_1 usw verschoben werden müssen, und diese Filiale_1 usw Ordner müssen erst angelegt werden, die existieren noch nicht, und die Filialnummer richtet sich nach der zahl nach dem F, beispiel: wenn ein Ordner F9K7 existiert müsste der Batch einen Ordner erstellen der Filiale_9 heißt und dann den F9K7 Ordner darein verschieben, und das bei so vielen Dateien jedesmal einzeln zu machen ... da wirste bekloppt ...

trotzdem danke!
Member: maneich
maneich Feb 16, 2006 at 00:20:39 (UTC)
Goto Top
Hallo,

Wenn diese Ordner alle in einem übergeordneten Verzeichnis liegen, kannst Du das mit

dir /o:g /s /b Übergordnetes_Verzeichnis

machen. Also z.B.
snip
for /f "tokens=*" %%e in ('dir /o:g /s /b Übergordnetes_Verzeichnis') do call: fold_cop %%e
goto eof

:fold_cop
x=%1
if .==%x:~-4, 1% exit
set y=%x:~-3, 1%
If not exist Laufw:\Verzeichnispfad\Filiale_1 md Laufw:\Verzeichnispfad\Filiale_%y%
xcopy /y %1 Laufw:\Verzeichnispfad\Filiale_%y%>nul
goto eof
snip

In for /f ... listest Du alle Daten auf, wobei die Verzeichnis als erstes gelistet werden
In fold_cop wird als erstes über den " . " an viertletzter Stelle abgefragt ob es eine Datei ist.
Wenn das sowohl die viert- als auch die fünftletzte Stelle sein kann (z.B. html) mußt Du mit "find" arbeiten

echo %x%|find ".">nul
if not errorlevel 1 exit

Dann sind auch alle Verzeichnisse abgearbeitet und die Batch wird beendet
Für die Filiale ist ja nur die Ziffer hinter F zuständig, also die drittletzte Stelle. Kann diese auch 2-stellig sein, muß die Abfrage erweitert werden, z.B. mit

if not %x:~-4, 1%==F (
set y= %x:~-4, 2% else
set y=%x:~-3, 1%
)

Danach wird überprüft ob das Verzeichnis Filiale_%y% existiert und wenn nicht erstellt.
Und zum Schluß wird das gesamte Verzeichnis kopiert.
Ist ungetestet, sollte aber so stimmen.

MfG maneich
Member: Biber
Biber Feb 16, 2006 at 22:11:24 (UTC)
Goto Top
Moin, Zwiebelmax,
willkommen im Forum.

Zwei Fussnoten zur maneich's Lösung:

If not exist Laufw:\Verzeichnispfad\Filiale_1 md Laufw:\Verzeichnispfad\Filiale_%y%
xcopy /y %1 Laufw:\Verzeichnispfad\Filiale_%y%>nul
Tippfehler:
If not exist Laufw:\Verzeichnispfad\Filiale_%y% md Laufw:\Verzeichnispfad\Filiale_%y%

goto eof
Tippfehler:
goto :eof

...


if not %x:~-4, 1%==F (
set y= %x:~-4, 2% else
set y=%x:~-3, 1%
)

--->würde ich so formatieren (und hab ein überflüssiges Leerzeichen beim ersten "set y=..." entfernt):
if not [%x:~-4, 1%]==[F] set y=%x:~-4, 2%
) else (
set y=%x:~-3, 1%
)

Soll aber nur eine konstruktive Ergänzung sein.
Getestet hab ich es ebenso wenig wie maneich. face-wink

Grüße Biber
Member: maneich
maneich Feb 16, 2006 at 23:25:34 (UTC)
Goto Top
Hallo,

nun ja, ungetestet schleichen sich immer wieder Leichtsinnsfehler ein.

Aber mit dem MD ist es ja nicht getan, er will ja auch die Ordner F?K? da rein kopieren.

Da hier immer mehrere Ordner wie o.a. reinkopiert werden, muß der Ordner Filiale_? ja nur beim ersten mal erstellt werden. Insofern ist xcopy ja richtig, über den Parameter läßt sich diskutieren.

MfG maneich
Member: Biber
Biber Feb 19, 2006 at 11:44:11 (UTC)
Goto Top
Na gut,

dann will ich auch mal meinen Lösungsansatz posten.
Das Szenario, so wie ich es verstanden habe:

Irgendwo existiert ein Quellverzeichnis, in dem die bisherigen Unterzeichnisse F1K7, F4K77 etc sind. Bei mir z.B.:

C:\WINDOWS\TEMP>dir f*
Verzeichnis von C:\WINDOWS\TEMP

19.02.2006 12:11 DIR f3k99
19.02.2006 12:11 DIR f1k2
19.02.2006 12:11 DIR f13k25
19.02.2006 12:12 DIR f2k77

Dann würde ich für diesen Pillepalle keinen Batch schreiben, sondern eine Zeile vom CMD-Prompt abfeuern:
C:\WINDOWS\TEMP>
@for /f %i in ('dir /b /a:d F*k*') do @For /f "delims=FfKk" %a in ("%i") do @echo xcopy %i\*.* z:\Filiale_%a\%i /s /e /i   
xcopy f3k99\*.* z:\Filiale_3\f3k99 /s /e /i
xcopy f1k2\*.* z:\Filiale_1\f1k2 /s /e /i
xcopy f13k25\*.* z:\Filiale_13\f13k25 /s /e /i
xcopy f2k77\*.* z:\Filiale_2\f2k77 /s /e /i
[Das "@echo" vor dem xcopy sollte natürlich nach dem Test gelöscht werden.]
Wenn ich alle XCopy-Befehle, die in die Grütze gehen, in einer Log-Datei dokumentieren will, hänge ich noch ein..
dran.
Sollte der Xcopy-Befehl nicht dazu in der Lage sein, das Verzeichnis "Filiale_N" und das Unterverzeichnis "F1K2" in einem Rutsch anzulegen (hab ich nicht getestet), dann eben diese Zeile vorweg:

@for /f %i in ('dir /b /a:d F*k*') do @For /f "delims=FfKk" %a in ("%i") do MD  z:\Filiale_%a\%i  
Wenn es partout ein Batch sein soll mit ein paar Doku-Zeilen:
::----snipp CopyToNewFiliale.bat--------------
@Echo off & setlocal
Set "Q=C:\Windows\Temp" && Rem Q wie Quellverzeichnis  
Set "Z=\\Server\Freigabexy\AlleFilialen" && Rem Z wie Zielverzeichnis  
Set "Log=%temp%\Filialcopy.log" && mein Logfile, nur für Fehler  
Pushd "%Q%"  
for /f %%i in ('dir /b /a:d F*k*') do (  
For /f "delims=FfKk" %%a in ("%%i") do (  
xcopy %Q%\%%i\*.* %Z%\Filiale_%%a\%%i /s /e /i||echo Fehler beim Kopieren von %%i nach %%a\%%i>>%log%
))
Popd
:: --snapp -CopyToNewFiliale.bat--------( ungetestete Skizze)
My 2c
Biber