Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateinamen ergänze, Pfad verkürzen

Frage Entwicklung Batch & Shell

Mitglied: dctibi

dctibi (Level 1) - Jetzt verbinden

02.10.2010 um 18:58 Uhr, 6091 Aufrufe, 4 Kommentare

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?!?!?!
Mitglied: bastla
02.10.2010 um 20:17 Uhr
Hallo dctibi und willkommen im Forum!

Grundsätzlich ließe sich Teil 1 (das Ergänzen des Dateinamens) schematisch etwa so umsetzen:
01.
@echo off & setlocal 
02.
set "Basis=D:\Test" 
03.
 
04.
for /f %%i in ('dir /s /b /a-d "%Basis%"') do set "Name=%%~ni" & call :ProcessFile "%%~fi" 
05.
goto :eof 
06.
 
07.
:ProcessFile 
08.
if "%Name:~3%" neq "" goto :eof 
09.
for %%a in ("%~1\..") do set "Parent=%%~nxa" 
10.
echo move %1 "..\%Parent%_%~nx1" 
11.
goto :eof
Das "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:
01.
@echo off & setlocal 
02.
set "Basis=D:\Test" 
03.
 
04.
for /r "%Basis%" %%i in (.) do ( 
05.
    set "Leer=True" 
06.
    for /f %%a in ('dir /s /b /a-d "%%i" 2^>nul') do set "Leer=" 
07.
    if defined Leer echo rd /s /q "%%i" 
08.
)
Auch hier dient das "echo" in Zeile 7 dem gefahrlosen Testen ...

Grüße
bastla
Bitte warten ..
Mitglied: dctibi
04.10.2010 um 15:27 Uhr
Hallo Bastla!

Ist ja genial gebastelt! wow!

Jedoch habe ich Probleme mit dem move...
Dein Skript startet in %Basis%
Holt dann eine Datei %1 und schiebt sie in Zeile 10 vom AKTUELLEN Pfad (also meinem Working-Directory) nach .. und dort mit dem von mir so gewünschten Dateinamen.
Das .. sollte sich jedoch nicht auf den aktuellen Pfad, sondern auf den Pfad zu %1 beziehen.

Dass bestehende Dateien nicht überschrieben werden, sollte man mit echo n|move lösen können, oder?

Beim zweiten Teil überprüft er wohl nur, ob keine Dateien drinnen sind - aber nicht, ob es Unterordner gibt - sehe ich das richtig?

Aber Danke für diese ersten, genialen, weil doch so kurz und einfach ausschauend (hätte es trotzdem nicht geschafft *g*) Antworten!
Bitte warten ..
Mitglied: bastla
04.10.2010 um 16:09 Uhr
Hallo dctibi!
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:
01.
if not exist "%~1\..\%Parent%_%~nx1" ( 
02.
    echo move %1 "%~1\..\%Parent%_%~nx1" 
03.
) else ( 
04.
    echo %1 konnte nicht verschoben werden! 
05.
)
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
Bitte warten ..
Mitglied: dctibi
06.10.2010 um 13:43 Uhr
Hallo Bastla,

habe bei mir dann Punkt 1 ausgebessert;
und Punkt 2 habe ich getestet... JAAA, es funktioniert! Super! Danke!
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Windows Userverwaltung
Servergespeichertes Profil - Pfad ausfindig machen (6)

Frage von staybb zum Thema Windows Userverwaltung ...

Batch & Shell
Leerzeichen im Pfad (4)

Frage von Jallio zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...