Zwischen Verzeichnis und Unterverzeichnis ein neues Verzeicchnis einfügen
Hallo Community,
Ich habe folgendes Problem:
Ich möchte zwischen einem Verzeichnis und Unterverzeichnis ein neues Verzeichnis einfügen. Dies sollte aber für alle Verzeichnisse erstellt werden, die sich unter einem bestimmten Laufwerk oder ein anderes Verzeichnis befinden.
Beispiel:
C:\1001\xy_1\...
neues Verz. "image" einfügen
C:\1001\image\xy_1\...
nächste Verzeichnis suchen
C:\1002\xy_2\...
neues Verz. "image" einfügen
C:\1002\image\xy_2\...
Wenn ich es manuell machen würde könnte dies so bei mir aussehen
Sollte unter c:\1001\ weiter Verzeichnisse existieren z.B. xy_2 müsste ich dieses auch verschieben.
Als nächstes würde das nächste Verzeichnis in c:\ folgen (hier dann c:\2002\)
Das ganze sollte dann für mehrere tausende Verzeichnisse ausgeführt werden. Da dies nicht manuell machbar ist hoffe ich dass mir jemand bei diesem Problem helfen kann.
Wäre echt super!!!
Gruß combat
Ich habe folgendes Problem:
Ich möchte zwischen einem Verzeichnis und Unterverzeichnis ein neues Verzeichnis einfügen. Dies sollte aber für alle Verzeichnisse erstellt werden, die sich unter einem bestimmten Laufwerk oder ein anderes Verzeichnis befinden.
Beispiel:
C:\1001\xy_1\...
neues Verz. "image" einfügen
C:\1001\image\xy_1\...
nächste Verzeichnis suchen
C:\1002\xy_2\...
neues Verz. "image" einfügen
C:\1002\image\xy_2\...
Wenn ich es manuell machen würde könnte dies so bei mir aussehen
cd 1001\ // ich fange mit dem ersten Verzeichnis an
c:\md image // ich erstelle mir ein neues Verzeichnis
c:\1001\dir /b // ich schau nach welche (außer des gerade erstellte) Verzeichnisse existieren z.B. xy_1
c:\1001\move c:\1001\xy_1 c:\1001\image\ // verschiebe das Verzeichnis xy_1 (mit dem gesamten Inhalt) in das neue Verz. "image"
Als nächstes würde das nächste Verzeichnis in c:\ folgen (hier dann c:\2002\)
Das ganze sollte dann für mehrere tausende Verzeichnisse ausgeführt werden. Da dies nicht manuell machbar ist hoffe ich dass mir jemand bei diesem Problem helfen kann.
Wäre echt super!!!
Gruß combat
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84822
Url: https://administrator.de/contentid/84822
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Ungetestet köntest dus so versuchen:
Edit: kleine diverse Verbesserungen
@echo off
set "zusatzverz=image"
set "rootpath=C:"
FOR /F "delims=" %%i in ('dir /B "%rootpath%"') do (
md "%rootpath%\%%i\%zusatzverz%"
FOR /F "delims=" %%j in ('dir /B "%rootpath%\%%i"') do (
if not "%%j" equ "%zusatzverz%" move "%rootpath%\%%j" "%rootpath%\%zusatzverz%"
)
)
Edit: kleine diverse Verbesserungen
@miniversum
Ob da wohl (abgesehen von Dateien) auch Verzeichnisse wie etwa "C:\Windows" mit erfasst würden?
@combat
Willkommen im Forum!
Kannst Du (im Hinblick auf die oben angesprochene Problematik) etwas genauer angeben, woran die zu bearbeitenden Ordner eigentlich zu erkennen sind?
Unter der Annahme, dass alle Ordnernamen mit "1" beginnen, könnte es zB so gehen:
Das "echo" vor dem "md" bzw vor dem "move" sorgt dafür, dass das Erstellen des neuen Ordners und die Verschiebeaktion zunächst nur angezeigt wird - wenn Du beide entfernst, wird das Verschieben tatsächlich ausgeführt. Um das Ganze besser nachvollziehen zu können, solltest Du den Batch von der Kommandozeile starten.
Grüße
bastla
[Edit] "echo" auch vor dem "md" hinzugefügt. [/Edit]
Ob da wohl (abgesehen von Dateien) auch Verzeichnisse wie etwa "C:\Windows" mit erfasst würden?
@combat
Willkommen im Forum!
Kannst Du (im Hinblick auf die oben angesprochene Problematik) etwas genauer angeben, woran die zu bearbeitenden Ordner eigentlich zu erkennen sind?
Unter der Annahme, dass alle Ordnernamen mit "1" beginnen, könnte es zB so gehen:
@echo off & setlocal
set "Neu=image"
for /d %%i in ("C:\1*.*") do (
echo Bearbeite: %%i
if not exist "%%i\%Neu%" echo md "%%i\%Neu%"
for /d %%a in ("%%i\*.*") do (
if /i "%%~nxa" neq "%Neu%" echo move "%%a" "%%i\%Neu%"
)
)
Grüße
bastla
[Edit] "echo" auch vor dem "md" hinzugefügt. [/Edit]
@miniversum
Ob da wohl (abgesehen von Dateien) auch Verzeichnisse wie etwa "C:\Windows" mit erfasst würden?
Ob da wohl (abgesehen von Dateien) auch Verzeichnisse wie etwa "C:\Windows" mit erfasst würden?
Soweit hab ich ncith gedacht, wäre aber nur ne kleine Änderung die ich zugegebenermasen nicht bedacht hatte. Aber darum läuft es auch als "ungetestet".
@miniversum
Da ist es dann schon wieder ein Vorteil, dass Du mit "dir /B" für %%j keinen vollständigen Pfad erhältst und daher das Verschieben ohnehin scheitert ...
Grüße
bastla
Da ist es dann schon wieder ein Vorteil, dass Du mit "dir /B" für %%j keinen vollständigen Pfad erhältst und daher das Verschieben ohnehin scheitert ...
Grüße
bastla
Hallo combat!
Wenn Du nur jeweils einen Unterordner von "D:\Archiv", also etwa "2001" bearbeiten willst, sollte das so gehen:
Für das jeweilige "echo" vor dem "md" bzw dem "move" gilt wie oben angemerkt: Es lässt sich damit der Ablauf simulieren, da der Befehl nur angeschrieben, aber nicht ausgeführt wird.
Willst Du doch alle Jahre auf einmal bearbeiten, kannst Du meinen ersten geposteten Batch mit folgender Änderung verwenden: Die erste "for"-Zeile muss dann
lauten.
Grüße
bastla
Wenn Du nur jeweils einen Unterordner von "D:\Archiv", also etwa "2001" bearbeiten willst, sollte das so gehen:
@echo off & setlocal
set "Neu=image"
set "Basis=D:\Archiv"
set /p "Jahr=Welches Jahr? "
if not exist "%Basis%\%Jahr%" echo %Jahr% nicht gefunden! & goto :eof
if not exist "%Basis%\%Jahr%\%Neu%" echo md "%Basis%\%Jahr%\%Neu%"
for /d %%a in ("%Basis%\%Jahr%\*.*") do (
if /i "%%~nxa" neq "%Neu%" echo move "%%a" "%Basis%\%Jahr%\%Neu%"
)
Willst Du doch alle Jahre auf einmal bearbeiten, kannst Du meinen ersten geposteten Batch mit folgender Änderung verwenden: Die erste "for"-Zeile muss dann
for /d %%i in ("D:\Archiv\2*.*") do (
Grüße
bastla