Ordner in Unterordner des Mainordners automatisch erstellen. Wie ?
Hallo ihr alle,
ich habe mal ne Frage.
Wie kann ich es machen, dass ich in alle meine Unterordner von "TEST" einen Ordner namens "XY" erstell?
Dann fänd ich es noch gut, wenn es eine Lösung gibt welches folgende Dinge "ausführt".
1) Suche in Unterordner von TEST ( allen Ordnern der nächsten Ebene nicht tiefer) nach einem Ordner "Jahr x" (muss variabel sein)
2)Wenn nicht vorhanden erstellen
3)Verschiebe alle welche im Jahr x erstellt wurden in den Ordner "Jahr x"
Kann mir dazu jemand vielleicht helfen?
MfG Sandro
ich habe mal ne Frage.
Wie kann ich es machen, dass ich in alle meine Unterordner von "TEST" einen Ordner namens "XY" erstell?
Dann fänd ich es noch gut, wenn es eine Lösung gibt welches folgende Dinge "ausführt".
1) Suche in Unterordner von TEST ( allen Ordnern der nächsten Ebene nicht tiefer) nach einem Ordner "Jahr x" (muss variabel sein)
2)Wenn nicht vorhanden erstellen
3)Verschiebe alle welche im Jahr x erstellt wurden in den Ordner "Jahr x"
Kann mir dazu jemand vielleicht helfen?
MfG Sandro
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51867
Url: https://administrator.de/contentid/51867
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
8 Kommentare
Neuester Kommentar
Moin Saggi,
ich habe jetz mal als "Jahr x" das Jahr 2006 eingesetzt.
Demo zu 1+2) Am CMD-Prompt:
In den beiden Zeilen muss das fette ECHO nach dem Anpassen und Testen entfernt werden.
Im Batch dann ggf. zwei Prozentzeichen statt einem vor den dynamischen Variablen (%%i statt %i etc.).
HTH
Biber
ich habe jetz mal als "Jahr x" das Jahr 2006 eingesetzt.
Demo zu 1+2) Am CMD-Prompt:
for /D %i in (\TEST\*) do @<b>ECHO</b> if not exist "%~nxi\Jahr 2006" md "%~nxi\Jahr 2006"
for /D %i in (\TEST\*) do @for %j in ("\TEST\%~nxi\*.xls") do @echo %~tj|find ".2006">nul && @<b>ECHO</b> Move "%i\%j" "%i\Jahr 2006\*.*"
In den beiden Zeilen muss das fette ECHO nach dem Anpassen und Testen entfernt werden.
Im Batch dann ggf. zwei Prozentzeichen statt einem vor den dynamischen Variablen (%%i statt %i etc.).
HTH
Biber
Moin Saggi
Siehe oben:
Die "produktive" Variante z.B. der ersten Zeile ware dann
- statt im TEST
Zweite Zeile entsprechend.
Gruß
Biber
Siehe oben:
In den beiden Zeilen muss das fette ECHO nach dem Anpassen und Testen entfernt werden.
Die "produktive" Variante z.B. der ersten Zeile ware dann
- statt im TEST
for /D %i in (\TEST\*) do @echo if not exist "%~nxi\Jahr 2006" md "%~nxi\Jahr 2006"
- neu im Einsatz/in PROD:for /D %i in (\TEST\*) do @if not exist "%~nxi\Jahr 2006" md "%~nxi\Jahr 2006"
Zweite Zeile entsprechend.
Gruß
Biber
Moin Saggi,
Okay, wenn also ein Verzeichnis "HauptOrdner" existiert mit "UnterordnerA", "UnterOrdnerB"...
Dann laufe ich diese Struktur entlang mit [Test am CMD-Prompt]:
Hier sollte Dir jetzt so etwas angezeigt werden:
Wenn das klappt, dann eine Ebene tiefer gehen (eine weitere FOR/D-Anweisung dahintersetzen:
Jetzt sollte etwas in der Art zu sehen sein:
Wenn num alle Verzeichnisse unterhalb der Ebenen Hund/Katze/Maus außer dem "Jahr 2006" selbst verschoben werden sollen, dann
(Fast der letzte) Test am CMD-Prompt:
Jetzt sollten nur alle Ordner angezeigt werden, die NICHT "Jahr 2006" heißen.
Und diese verschieben wir -wenn das bisher geklappt hat!-
Jetzt als Batch-Version - alle Prozentzeichen werden verdoppelt:
Das einzige, was dazugekommen ist:
wenn Du mit den Befehl vorher, also Find /v ERFOLGREICH warst, kein Verzeichnis "Jahr 2006" gerade gefunden hast, dann verschieb dieses Verzeichnis.
Probier mal bitte mit Deinen Werten für "x:\HauptOrdner" und "UnterOrdner" aus, inwieweit ich es so anforderungsgerecht hingebogen habe.
Grüße
Biber
Es gibt einen Hauptordner
In diesem gibt es Unterordner
In den Unterordnern wird jeweils ein Order "Jahr 200$x" erstellt
Also nennen wir die oberen Ebenen mal "x:\Hauptordner" und "UnterordnerA" [.und parallel UnterOrdnerB.."In diesem gibt es Unterordner
In den Unterordnern wird jeweils ein Order "Jahr 200$x" erstellt
Alle Dateien und Ordner im Unterordner sollen in den Ordner "Jahr 200$x" verschoben werden
AUSNAHME Ordner mit dem Namen Jahr 200$x - diese sollen bleiben.
AUSNAHME Ordner mit dem Namen Jahr 200$x - diese sollen bleiben.
Okay, wenn also ein Verzeichnis "HauptOrdner" existiert mit "UnterordnerA", "UnterOrdnerB"...
Dann laufe ich diese Struktur entlang mit [Test am CMD-Prompt]:
for /D %i in ("x:\HauptOrdner\*") do @echo %i
x:\HauptOrdner\Hund
x:\HauptOrdner\Katze
x:\HauptOrdner\Maus
x:\HauptOrdner\UnterordnerA
x:\HauptOrdner\UnterordnerB
...
for /D %i in ("x:\HauptOrdner\*") do @for /D %j in ( "%i\*") do @echo %j
x:\HauptOrdner\Hund\Futter
x:\HauptOrdner\Hund\Steuer
x:\HauptOrdner\Hund\Tierarzt
x:\HauptOrdner\Hund\Jahr 2006
x:\HauptOrdner\Katze\Streu
x:\HauptOrdner\Katze\Möbel
x:\HauptOrdner\Katze\Jahr2006
....
....
x:\HauptOrdner\Maus
...
x:\HauptOrdner\Maus\Jahr 2006
x:\HauptOrdner\UnterordnerA
...
x:\HauptOrdner\UnterordnerB
...
Wenn num alle Verzeichnisse unterhalb der Ebenen Hund/Katze/Maus außer dem "Jahr 2006" selbst verschoben werden sollen, dann
(Fast der letzte) Test am CMD-Prompt:
for /D %i in ("x:\HauptOrdner\*") do @for /D %j in ( "%i\*") do @echo "%~nxj"|find /v "Jahr 2006"
Und diese verschieben wir -wenn das bisher geklappt hat!-
Jetzt als Batch-Version - alle Prozentzeichen werden verdoppelt:
::----das wird ein Batch.cmd
@echo off
for /D %%i in ("x:\HauptOrdner\*") do @for /D %%j in ( "%%i\*") do @(
echo "%%~nxj"|find /v "Jahr 2006" >nul && move "%%j" "%%i\Jahr 2006"
)
Das einzige, was dazugekommen ist:
&& move "%%j" "%%i\Jahr 2006"
...übersetzt soviel wie :wenn Du mit den Befehl vorher, also Find /v ERFOLGREICH warst, kein Verzeichnis "Jahr 2006" gerade gefunden hast, dann verschieb dieses Verzeichnis.
Probier mal bitte mit Deinen Werten für "x:\HauptOrdner" und "UnterOrdner" aus, inwieweit ich es so anforderungsgerecht hingebogen habe.
Grüße
Biber
Moin Saggi,
das können wir natürlich jetzt schrittweise verfeinern.
Bisher ist es ja nur eine Konzeptskizze, ein Proof of Concept.
Dann machen wir das stufenweise - wir ermitteln erst die Unterverzeichnisse, die geMOVEd werden sollen und machen das eigentliche MOVE danach.
Ausgehen vom Batch oben dann:
So in etwa wäre die ungetestete Skizze, wenn davon ausgegangen werden könnte, dass sich in jeder Unterstruktur ein Ordner "Jahr 2006" befindet.
Wenn wir das noch erweitern dahingehend, das sich dort eintweder ein Ordner "Jahr 2005" ODER ein Ordner "Jahr 2006" oder ein Ordner "Jahr 2007" oder eben nichts von alledem befindet:
Auch dieses ungetestet.
Grüße
Biber
das können wir natürlich jetzt schrittweise verfeinern.
Bisher ist es ja nur eine Konzeptskizze, ein Proof of Concept.
Ich habe nur noch das Problem, dass ich 6 mal den Ausruf "Prozess onte nicht zugreifen.....da bereits verwendet wird" - es werden aber alle VErzeichnisse verschoben.
Das wird daran liegen, dass ja nun die Verzeichnisstruktur, die mit FOR/D durchwackelt wird, gleichzeitig geändert wird.Dann machen wir das stufenweise - wir ermitteln erst die Unterverzeichnisse, die geMOVEd werden sollen und machen das eigentliche MOVE danach.
Ein Problem welches ich noch habe ist, dass keine Dateien verschoben werden - sondern nur die Ordner
Okay, das kann daran liegen, dass ich auch bisher nur die Verzeichnisse anfasse und keine Zeile für die Einzeldateien im (Ober-)Ordner vorgesehen habe.Ausgehen vom Batch oben dann:
::----das wird ein Zwischen-Batch.cmd
@echo off
REM Zweistufiges Vorgehen - erst alles rausschreiben, was später verschoben werden soll:
Set "Tmpbat=%temp%\tmp.bat"
if exist "%tmpbat%" del "%tmpbat%"
for /D %%i in ("x:\HauptOrdner\*") do @(
If exist "%%i\*.*" ECHO move "%%i\*.*" "%%i\Jahr 2006\" >>"%tmpbat%"
for /D %%j in ( "%%i\*") do @(
echo "%%~nxj"|find /v "Jahr 2006" >nul && ECHO move "%%j" "%%i\Jahr 2006" >>"%tmpbat%"
) )
if exist "%tmpbat%" call "%tmpbat%"
if exist "%tmpbat%" del "%tmpbat%"
So in etwa wäre die ungetestete Skizze, wenn davon ausgegangen werden könnte, dass sich in jeder Unterstruktur ein Ordner "Jahr 2006" befindet.
Wenn wir das noch erweitern dahingehend, das sich dort eintweder ein Ordner "Jahr 2005" ODER ein Ordner "Jahr 2006" oder ein Ordner "Jahr 2007" oder eben nichts von alledem befindet:
::----das wird ein erweiterter Zwischen-Batch.cmd
@echo off & setlocal
REM Zweistufiges Vorgehen - erst alles rausschreiben, was später verschoben werden soll:
Set "Tmpbat=%temp%\tmp.bat"
if exist "%tmpbat%" del "%tmpbat%"
for /D %%i in ("x:\HauptOrdner\*") do @(
For /L %%a in (2005,1,2008) do if exist "%%i\Jahr %%a" call :DoTheMoveTo "%%i" "Jahr %%a"
)
if exist "%tmpbat%" call "%tmpbat%"
if exist "%tmpbat%" del "%tmpbat%"
goto :eof
~~~~~~
:DoTheMoveTo Parameter 1 ist das Oberverzeichnis über "Jahr 200x"; Param2 das gefundene Verzeichnis "Jahr 200x"
If exist "%~1\*.*" ECHO move "%~1\*.*" "%~1\%~2\" >>"%tmpbat%"
for /D %%j in ( "%~1\*") do @(
echo "%%~nxj"|find /v "%~2" >nul && ECHO move "%%j" "%~1\%~2" >>"%tmpbat%"
)
goto :eof
Grüße
Biber