herminator1
Goto Top

Verzeichnisse und deren Unterverzeichnisse logisch umbenennen

In der Firma führen wir eine neue für alle im Netzwerk zugängliche Ordnerstruktur ein (ja, sowas gibts noch).
Dazu müssen (Unter-) Verzeichnisse umbenannt werden.

Es existiert schon ein weitreichend nach unten verzweigter leerer Explorer-Baum.
Diese Ordner werden erst nach und nach mit Dateien/Dokumenten gefüllt.

Schlau wie ich bin, habe ich vor die jeweiligen Verzeichnisnamen Zahlen gesetzt, damit die Verzeichnisse nicht nach ABC sondern nach den Zahlen sortiert werden.

Leider habe ich diese nur zweistellig angelegt und benötige diese jetzt dreistellig.

Also Beispiel:

Vorhanden: 01-Verzeichnisname
02-Verzeichnisname
.....
09-Verzeichnisname
10-Verzeichnisname
usw.

Ersten beiden Ziffern sollen mit 10 multipliziert werden.

Also wird daraus:

010-Verzeichnisname
020-Verzeichnisname
.....
090-Verzeichnisname
100-Verzeichnisname
usw.

Die Logik ist immer die gleiche: zwei Ziffern - Gedankenstrich - Verzeichnisname (jeweils ohne Leerzeichen dazwischen s.o.)

Die Umbenamsungen sollen für alle Verzeichnisse und deren Unterverzeichnisse gemacht werden.


Kann mir da jemand kurzfristig weiterhelfen?

Bitte beachten, dass ich nur ein (kleiner) Buchhalter bin, dem die EDV "ans Bein gebunden" wurde!!!

Also setzt nicht allzuviel voraus.....

HERZLICHEN DANK IM VORAUS!!!!!!!!!!
Kommentar vom Moderator Biber am May 16, 2010 um 11:38:46 Uhr
Verschoben von "Windows"->"Netzwerk" nach "Batch & Shell".

Content-Key: 142877

Url: https://administrator.de/contentid/142877

Printed on: April 20, 2024 at 01:04 o'clock

Member: Edi.Pfisterer
Edi.Pfisterer May 15, 2010 at 17:03:26 (UTC)
Goto Top
Hallo herminator1 und herzlich willkommen im Forum!

hier der Code:
Set objFSO = CreateObject("Scripting.FileSystemObject")  
function ordner(pfad)

        Set objFolder = objFSO.GetFolder(pfad)
        Set colSubfolders = objFolder.Subfolders

        For Each objSubfolder in colSubfolders
        on Error resume next

                 vollername = objFSO.GetAbsolutePathName(objSubfolder)
                 ordnername = right(vollername, (len(vollername) - instrRev(vollername,"\")))  
                 pfad = left(vollername, instrRev(vollername,"\"))  
                 ordnerneu = pfad & "0" & ordnername  

                 objFSO.MoveFolder pfad & ordnername , ordnerneu


         call ordner(ordnerneu)
        Next


end function

call ordner("C:\test")  

Alles, was Du zu ändern hast, ist die letzte Zeile - dort gehört der Überordner Deiner Verzeichnisse hinein.
ACHTUNG: zuerst würde ich das ganze mit der kopierten Ordnerstruktur testen, falls das Ergebnis doch nicht Deinen Wünschen entspricht...

btw: Falls Dir wieder mal eine Stelle zuwenig ist: bei erneuter Ausführung wird einfach noch eine 0 vor jeden Ordnernamen gehängt.

Hoffe, geholfen zu haben!
Wir Buchhalter müssen einfach zusammenhalten (bzw. ich als Buchhaltungslehrer mit Dir als Buchhalter face-wink

lg
Edi

PS: wenn bei Dir folgende Rechnung Sinn gibt, dann wundert mich meine Steuerabrechnung nicht mehr face-wink
die Ersten beiden Ziffern sollen mit 10 multipliziert werden. Daraus wird dann 010
Mitglied: 77559
77559 May 15, 2010 at 17:14:16 (UTC)
Goto Top
Hallo Herminator1,

willkommen im Forum, leider fehlt mir in deinem Beitrag eine Begrüßung.
Das könnte so gehen (ungestestet)
@Echo off
For /f "Delims=" %%A in ('Dir /B/S/AD ??-* ^| Sort /R ') Do Set "Name=%%~nxA"&Call :Check "%%A"  
Goto :Eof
:Check
:: Prüfe of 2 Ziffern Minus am Anfang, wenn nicht nächster
Echo.%Name%|Findstr "^[0-9][0-9]-" >NUL 2>&1 ||Goto :Eof  
Echo Ren %1 "%Name:~0,2%0%Name:~2%"  
Als Batchdatei speichern und in dem Verzeichnis starten ab dem abwärts umbenannt werden soll.

Wenn die Ausgabe auf dem Bildschirm richtig erscheint, das Echo in der letzten Zeile entfernen.

Gruß
LotPings

Edit falsche Tilde entfernt.
Mitglied: 77559
77559 May 15, 2010 at 17:26:45 (UTC)
Goto Top
Zitat von @Edi.Pfisterer:
PS: wenn bei Dir folgende Rechnung Sinn gibt, dann wundert mich meine Steuerabrechnung nicht mehr face-wink
> die Ersten beiden Ziffern sollen mit 10 multipliziert werden. Daraus wird dann 010
Hallo Edi,

für mich ergibt das schon Sinn, ich nehme mal an auch für das FA face-wink
Bis auf das Problem verschwindender führener Nullen beim Multiplizieren sehe ich da kein Hindernis.
Er wollte die zusätzliche Null ja hinter den 2 Stellen nicht davor.

Gruß
LotPings
Member: Edi.Pfisterer
Edi.Pfisterer May 16, 2010 at 00:14:13 (UTC)
Goto Top
Hallo!
Sorry, ich hab die Anforderung falsch verstanden... (oder nur beinahe richtig face-wink
Der erste Ansatz hat eine 0 VOR jeden Ordnernamen gestellt, dh aus 01 wurde 001.

also, hier nun der entsprechende vbs-code (falls LotPings Vorschlag entgegen jeder Annahme nicht funktionieren sollte).
Einfach als ordner.vbs speichern, letzte Zeile entsprechend verändern und durch Doppelklick starten (natürlich zuerst eine Sicherung des aktuellen Stands durchführen. Ich garantiere für Nichts face-wink ):

Set objFSO = CreateObject("Scripting.FileSystemObject")  
function ordner(pfad)

        Set objFolder = objFSO.GetFolder(pfad)
        Set colSubfolders = objFolder.Subfolders

        For Each objSubfolder in colSubfolders
        on Error resume next

                 vollername = objFSO.GetAbsolutePathName(objSubfolder)
                 ordnername = right(vollername, (len(vollername) - instrRev(vollername,"\"))-2)  
                 pfad = left(vollername, instrRev(vollername,"\")+2)  

                 ordnerneu = pfad & "0" & ordnername  
               
                 objFSO.MoveFolder pfad & ordnername , ordnerneu


         call ordner(ordnerneu)
        Next


end function

call ordner("C:\test")  

lg
Edi
Member: herminator1
herminator1 May 16, 2010 at 08:03:21 (UTC)
Goto Top
Hai Edi!

Vielen Dank für die schnelle Antwort.

Jedoch passiert bei deinem o.g. Script gar nichts.
Ich habe also eine txt-Datei erstellt, deine o.g. Zeilen reinkopiert (ohne die Zeilennummern) und als "ordner.vbs" abgespeichert.

Auf den Doppelklick passiert nichts. Auch nicht in "c:\test".

Habe ich da was falsch gemacht???


Gruß
herminator1

PS.: ich glaube, ich konzentriere mich wieder auf Steuererklärungen.........
Member: herminator1
herminator1 May 16, 2010 at 08:14:17 (UTC)
Goto Top
Servus LotPings,

sorry für die fehlende Begrüßung - aber nachdem ich meinen Beitrag aufgrund nicht funktionierenden wlans ungefähr das siebte mal verfasst habe, ist mir die wahrscheinlich untergegangen......

Vielen Dank übrigens für deine Hilfe.
Allerdings funktioniert dies nicht - bei mir....

ich habe also eine txt-Datei erstellt, die o.g. Zeilen (ohne Zeilennummern) reinkopiert und im cmd gestartet.

Dabei erschien folgender Fehler:
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters ist ungültig:
%~Name:~0,2%0%Name:~2%"

Geben Sie CALL /? oder FOR /? ein, um herauszufinden, welche Formate gültig sind.
Syntaxfehler.


Kannst du mir da nochmal weiterhelfen?

Herzlichen Dank!!!!
Mitglied: 77559
77559 May 16, 2010 at 08:18:33 (UTC)
Goto Top
Moin,

sorry mein Fehler. Die Tilde vor Name ist da versehentlich reingerutscht.
Ich ändere den Code oben ab,
versuche es dann noch einmal.

Gruß
LotPings

PS: Edi's zweiter Code funktionierte hier einwandfrei.
Member: herminator1
herminator1 May 16, 2010 at 08:28:35 (UTC)
Goto Top
uuuiiiihhhh !

Supie !

Vielen dank für deine Hilfe - genau so wollte ich es.

du hast mir soeben stundenlange Nachbesserungsarbeit erspart.....

Ich hoffe, dich hat's nicht zu viel zeit gekostet.......

Gruß
herminator1
Mitglied: 77559
77559 May 16, 2010 at 08:56:34 (UTC)
Goto Top
Zitat von @herminator1:
Vielen dank für deine Hilfe - genau so wollte ich es.

Danke fürs Feedback, wenn du den Beitrag jetzt noch auf Erledigt setzt, wäre das prina.

Ich hoffe, dich hat's nicht zu viel zeit gekostet.......
Nö, eine leichte Fingerübung und dabei passieren dann schon mal Flüchtigkeitsfehler face-wink

Einen schönen Sonntag noch.

Gruß
LotPings
Member: Edi.Pfisterer
Edi.Pfisterer May 16, 2010 at 12:41:24 (UTC)
Goto Top
Member: Edi.Pfisterer
Edi.Pfisterer May 16, 2010 at 12:43:59 (UTC)
Goto Top
Hallo herminator1!
Schade, dass der Code bei Dir nicht funktioniert, ich habe ihn soeben getestet und bei mir hat er tadellos das getan, was ich mir erwartete...

als Ursachen fürs Versagen fallen mir spontan 2 Gründe ein:

1.) der Ordner c:\test hat keine Unterordner (die 0 wird nur in den Unterordnern von c:\test ergänzt)
2.) Du hast Vista und diese Benutzerkontensteuerung aktiviert (das erkennst Du daran, dass bei Auswahl der Systemsteuerung o. ä. immer dieses Fenster aufpoppt, ob Du jetzt da wirklich was herummurksen willst face-wink. In einigen Fällen führt dies dazu, dass vbs-Dateien nicht ausgeführt werden...

Vielleicht hättest du ja noch ein bissl Zeit und könntest mir - quasi als Gegenleistung für meinen Hilfeversuch - folgendes testen:

1.) im Verzeichnis c:\test noch ein paar unterordner anlegen

2.) in Deiner ordner.vbs (btw: du kannst den Quelltext, wenn er mit dem Code-Tag gepostet wurde, auch einfach durch Klick auf den Text rechts oben vom entsprechenden Code ("in den Speicher kopieren") in den Zwischenspeicher hiefen und dann mit Einfügen im notepad wiedererscheinen lassen...)
folgende Zeile löschen:
on Error resume next
und deine ordner.vbs (ohne diese Zeile) dann in C:\test speichern

3.) in einem Command-Fenster folgendes eintippen und mit Enter bestätigen:

wscript c:\test\ordner.vbs

Würde mich interessieren, welche Fehlermeldung da erscheint oder obs mit vorhandenen Unterordnern in C:\test eh funktioniert

Danke für Deine Mithilfe im Voraus
lg
Edi
Member: herminator1
herminator1 May 17, 2010 at 12:56:04 (UTC)
Goto Top
Servus Edi!

Wie du vielleicht nach posten deines letzten Kommentars vielleicht gesehen hast, hat sich mein Problem durch Hilfe von LotPings bereits zu meiner vollsten Zufriedenheit gelöst.

Ich danke dir aber trotzdem herzlichst für deine Bemühungen!

Schon toll, was alles geht, wenn man sich auskennt!!!!!
Hut ab vor solchen Leuten wie Ihr es seid....!!!!

Gruß
Herminator1
Member: Edi.Pfisterer
Edi.Pfisterer May 18, 2010 at 08:57:35 (UTC)
Goto Top
Hallo Herminator1!
Danke für die Blumen...
Das hab ich schon mitgekriegt, dass du mit Hilfe von LotPings Beitrag Dein Problem beseitigen konntest...
Mir gings ums TESTEN, da es mich interessiert hätte, warum mein Code bei Dir nicht funktioniert... (An allen anderen PCs, an denen ich ihn ausprobierte, hat er nämlich funktioniert...). und bei der Fehlersuche wäre natürlich die Fehlermeldung, die Du bekommst, hilfreich gewesen.

Na macht nix!
Freun wir uns, dass es ein Problem weniger auf dieser Welt gibt face-wink
lg
Edi