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, 6205 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst PowerShell Skript für doppelte Dateinamen (1)

Frage von janelsaesser zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch - erkennen, ob ein Pfad lokal ist oder im Netzwerk liegt (3)

Frage von zimbosmurf zum Thema Batch & Shell ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (50)

Frage von sabines zum Thema Internet ...

Netzwerke
LAN2LAN Verbindung sehr langsam flaschenhals gesucht (27)

Frage von PixL86 zum Thema Netzwerke ...

Router & Routing
PFsense - Netzverbindung steht, aber kein Internet vorhanden (24)

Frage von aschmid zum Thema Router & Routing ...

Windows Server
gelöst Windows 2016 Hyper-V und VHDS (19)

Frage von emeriks zum Thema Windows Server ...