Dateinamen ergänze, Pfad verkürzen
Hallo, bräuchte unter DOS ein Skript (unter Unix wäre es ja keine Kunst), das bei uns den Verzeichnisbaum aufräumt:
Weit verschachtelter Verzeichnisbaum.
Da und dort sind Dateinamen, deren Name unter 4 Zeichen lang ist.
Das muss nicht sein und sollte behoben werden. Nur wie?
<p>
z.B. d:\daten\bla\bla2\bla3\fotos\sommer2008\10.jpg
sollte werden zu d:\daten\bla\bla2\bla3\fotos\sommer2008_10.jpg
<p>
(Und danach kann sommer2008 als Ordner aufgelöst werden)
<p>
Frage: Wie geht das unter MS-DOS/Windows?!?!?!
Weit verschachtelter Verzeichnisbaum.
Da und dort sind Dateinamen, deren Name unter 4 Zeichen lang ist.
Das muss nicht sein und sollte behoben werden. Nur wie?
<p>
z.B. d:\daten\bla\bla2\bla3\fotos\sommer2008\10.jpg
sollte werden zu d:\daten\bla\bla2\bla3\fotos\sommer2008_10.jpg
<p>
(Und danach kann sommer2008 als Ordner aufgelöst werden)
<p>
Frage: Wie geht das unter MS-DOS/Windows?!?!?!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 152238
Url: https://administrator.de/contentid/152238
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo dctibi und willkommen im Forum!
Grundsätzlich ließe sich Teil 1 (das Ergänzen des Dateinamens) schematisch etwa so umsetzen:
Das "
Teil 2 (Auflösen des Ordners) könnte aber eigentlich nur (und auch dann sinnvoller Weise erst im Nachhinein) für gänzlich leere (zumindest hinsichtlich darin bzw in Unterordnern enthaltener Dateien) Ordner durchgeführt werden - also etwa:
Auch hier dient das "
Grüße
bastla
Grundsätzlich ließe sich Teil 1 (das Ergänzen des Dateinamens) schematisch etwa so umsetzen:
@echo off & setlocal
set "Basis=D:\Test"
for /f %%i in ('dir /s /b /a-d "%Basis%"') do set "Name=%%~ni" & call :ProcessFile "%%~fi"
goto :eof
:ProcessFile
if "%Name:~3%" neq "" goto :eof
for %%a in ("%~1\..") do set "Parent=%%~nxa"
echo move %1 "..\%Parent%_%~nx1"
goto :eof
echo
" vor dem "move
" sorgt dafür, dass das Umbenennen und Verschieben zunächst nur (durch die Ausgabe des entsprechenden Befehles) simuliert wird. Nicht berücksichtigt (auch in Deiner Beschreibung) ist vorläufig die Möglichkeit, dass es eine Kollision der umbenannten Datei mit einer im darüber liegenden Ordner bereits vorhandenen gleichnamigen Datei geben könnte ("move
" würde in diesem Fall ohne Rückfrage überschreiben) ...Teil 2 (Auflösen des Ordners) könnte aber eigentlich nur (und auch dann sinnvoller Weise erst im Nachhinein) für gänzlich leere (zumindest hinsichtlich darin bzw in Unterordnern enthaltener Dateien) Ordner durchgeführt werden - also etwa:
@echo off & setlocal
set "Basis=D:\Test"
for /r "%Basis%" %%i in (.) do (
set "Leer=True"
for /f %%a in ('dir /s /b /a-d "%%i" 2^>nul') do set "Leer="
if defined Leer echo rd /s /q "%%i"
)
echo
" in Zeile 7 dem gefahrlosen Testen ...Grüße
bastla
Hallo dctibi!
Grüße
bastla
Das .. sollte sich jedoch nicht auf den aktuellen Pfad, sondern auf den Pfad zu %1 beziehen.
Stimmt (in der Zeile davor hatte ich's auch noch dabei), daher:echo move %1 "%~1\..\%Parent%_%~nx1"
Dass bestehende Dateien nicht überschrieben werden, sollte man mit echo n|move lösen können, oder?
Nein - in einem Batch überschreibt "move
" ohne Rückfrage, daher hilft nur nur ein "if exist
" vorweg:if not exist "%~1\..\%Parent%_%~nx1" (
echo move %1 "%~1\..\%Parent%_%~nx1"
) else (
echo %1 konnte nicht verschoben werden!
)
Beim zweiten Teil überprüft er wohl nur, ob keine Dateien drinnen sind - aber nicht, ob es Unterordner gibt - sehe ich das richtig?
Jein - auch Unterordner werden auf enthaltene Dateien überprüft, sodass also nur gelöscht wird, wenn nur noch Unterordner vorhanden sind (oder eben der Ordner ganz leer ist).Grüße
bastla