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

Ordnernamen auf die ersten 7 Zeichen reduzieren.

Frage Entwicklung Batch & Shell

Mitglied: cr0sscut

cr0sscut (Level 1) - Jetzt verbinden

02.08.2013 um 14:30 Uhr, 1502 Aufrufe, 12 Kommentare, 1 Danke

Hallo zusammen,

bei folgendem Problem benötige ich eure Hilfe:

Ich habe eine Ordnerstruktur die so aussieht:

T:\Ordner\Unterordner\UnterUnterordner\

Die „UnterUnterordner“ sollen vom Namen her auf die ersten 7 Zeichen reduziert werden … das habe ich mit folgendem Quellcode versucht:

01.
:UMBENENNEN 
02.
 
03.
for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do ( 
04.
 
05.
            set "name=%%~nxj" && echo ren "%%j" "%name:~0,7%" 
06.
 
07.
08.
 
09.
)
Leider benennt er so jeden in Unterordner befindenden Ordner nach dem letzten Ordner um. Kann man in der Batch irgendwie festlegen, dass Ordner für Ordner abgearbeitet wird?

Liebe Grüße,

cr0sscuT
Mitglied: Biber
02.08.2013 um 14:51 Uhr
Moin cr0sscut,

es würde schon helfen, wenn du "Setlocal EnableDelayedExpansion" als neue erste Zeile verwendest und dann das ""%name:~0,7%" in "!name:~0,7!" änderst.

Aber dennoch ist es ein Schönwetterbatch:
  • es wird nicht geprüft, ob die umzubenamsenden Ordner überhaupt mehr als 7 Zeichen haben
  • es wird nicht geprüft, ob vielleicht mehrere Ordner auf den gleichen 7stelligen Namen verkürzt werden.

Mach erstmal eine Version v 0.02beta fertig, dann schauen wir weiter.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
02.08.2013, aktualisiert um 15:17 Uhr
... wobei es noch sicherer wird, wenn "delayedexpansion" erst nach Zuweisung der Schleifenwerte an Variable aktiviert wird, da so auch die "!"-Problematik umschifft werden kann - also etwa:
01.
:UMBENENNEN 
02.
 
03.
for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do ( 
04.
    set "Ordner=%%~fj" & set "name=%%~nxj" 
05.
    setlocal enabledelayedexpansion 
06.
    echo ren "!Ordner!" "!name:~0,7!" 
07.
    endlocal 
08.
09.
)
BTW: Wenn der Name schon vorher nicht mehr als 7 Zeichen lang war, passiert weiter nix Schlimmes ...

Grüße
bastla
Bitte warten ..
Mitglied: cr0sscut
05.08.2013 um 11:08 Uhr
Hallo,

danke schonmal. Klappt super!

Nun steh ich vor einem neuen Problem, worüber ich vorher nicht nachgedacht habe.

Und zwar kommt es vor, dass die Ordner auf den ersten 7 Zeichen gleich heißen, also das sieht wie folgt bei mir aus:

Name_Pos_001_a_TYP_Größe
Dateiname-S.pdf
Name_Pos_002_a_TYP_Größe
Dateiname-S.pdf

„Name“ ist immer 7 Zeichen lang. Sprich alles ist gleich, außer die Nummern unterscheiden sich. Es kommt aber auch schonmal vor, dass die Nummern die Gleichen sind, die nachfolgenden Buchstaben dann aber unterschiedlich, wie zum Beispiel:

Name_Pos_001_a_TYP_Größe
Dateiname-S.pdf
Name_Pos_001_b_TYP_Größe
Dateiname-S.pdf

Kann man die Ordner iwie zusammenführen?

Dann aber noch ein weiteres Problem … die Dateinamen. Diese sind auch exakt die Gleichen -> Probleme beim Zusammenführen. Ist es möglich ein Teil des ursprünglichen Ordnernamen, also „Name_Pos_001_a“ dem „-S.pdf“ davor zu setzen, sprich

Name_Pos_001_a-S.pdf

Ich hoffe das ist verständlich was ich bräuchte.

Liebe Grüße,

cr0sscuT
Bitte warten ..
Mitglied: bastla
05.08.2013 um 11:25 Uhr
Hallo cr0sscuT!

Es wäre also ok, Dateien aus mehreren Ordnern (wenn letztere mit den gleichen 7 Zeichen beginnen) zusammen zu fassen?

Wenn ja:
  • Befinden sich in den Ordnern nur PDF-Dateien?
  • Enden die Namen aller PDF-Dateien auf "-S"?
  • Enthalten die Namen der PDF-Dateien noch weitere "-"?

Grüße
bastla
Bitte warten ..
Mitglied: cr0sscut
05.08.2013 um 13:41 Uhr
Hallo bastla,

Richtig, das sollte sogar so sein!

- Dateiendungen kommen unterschiedliche vor, also nicht nur PDF
- Auch andere Endungen im Dateinamen sind möglich, jedoch immer vorab Name-Pos-00X-X-...
- ja, Name, Pos, Nummer und Index sollten alle durch einen - getrennt werden, nicht wie oben geschrieben mit einem _

Danke und Grüsse,

Cr0sscuT
Bitte warten ..
Mitglied: bastla
05.08.2013, aktualisiert um 19:22 Uhr
Hallo cr0sscuT!

Haben die Dateinamen (wie "Dateiname-S.pdf") einen einheitlichen Aufbau, enden sie insbesondere mit "-" und genau einem weiteren Zeichen, das dann im neuen Namen enthalten sein soll?

Außerdem: Gibt es auch noch Unterordner?

Grüße
bastla
Bitte warten ..
Mitglied: cr0sscut
06.08.2013 um 07:19 Uhr
Hallo bastla,

danke für deine Antwort.

Folglich die Dateinamen, welche möglich sind:

Name-Pos-00X-X-t.pdf
Name-Pos-00X-X-ts.pdf
Name-Pos-00X-X-tz.pdf
Name-Pos-00X-X-v1l.pdf
Name-Pos-00X-X-v1r.pdf
Name-Pos-00X-X-v2l.pdf
Name-Pos-00X-X-v2r.pdf
Name-Pos-00X-X-n.pdf
Name-Pos-00X-X-k1.pdf
Name-Pos-00X-X-k2.pdf
Name-Pos-00X-X-k3.pdf
Name-Pos-00X-X-k4.pdf
Name-Pos-00X-X-scr.doc

Die ursprünglichen Ordner, welche auf 7 Zeichen gekürzt werden müssen sehen ja so z.B. aus:

1234567_000000_001_a_Typ_Größe

Kann man für die Dateinamen in diesem Fall dann nicht „einfach“ auf die ersten 21 Zeichen reduzieren und die „_“ in „-„ umwandeln?

Dabei können Name, Pos, Nummer und Index variieren von der Benennung her. Sie enden alle mit dem „-„ und 1 – 3 Zeichen dahinter, welche im neuen Namen enthalten sein sollen.

Unterordner könnten durch fehlerhafte Behandlung / Ablage des Bedieners vorkommen, ja.

Besten Dank & Grüße,

cr0sscuT
Bitte warten ..
Mitglied: bastla
06.08.2013 um 09:44 Uhr
Hallo cr0sscuT!

Vollig ungetestet könnte das etwa so aussehen:
01.
:UMBENENNEN 
02.
 
03.
for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do ( 
04.
    set "Ordner=%%i" 
05.
    set "UOrdner=%%j" 
06.
    set "UOName=%%~nxj" 
07.
    setlocal enabledelayedexpansion 
08.
    set "Ziel=!Ordner!\!UOName:~,7!" 
09.
    set "UOKennung=!UOName:~,21!" 
10.
    set "UOKennung=!UOKennung:_=-!" 
11.
    echo md "!Ziel!" 2>nul 
12.
    for %%a in ("!UOrdner!\*.*") do ( 
13.
        for /f "tokens=5 delims=-" %%b in ("%%~na") do (      
14.
            echo move "%%a" "!Ziel!\!UOKennung!-%%b%%~xa" 
15.
16.
17.
    for /d %%k in ("%%j\*") do echo move "%%k" "!Ziel!" 
18.
    echo rd "!UOrdner!" 
19.
    endlocal 
20.
)
Die "echo" in den Zeilen 11, 14, 17 und 18 dienen zum Testen - es werden so alle Anweisungen danach nur angezeigt, aber nicht ausgeführt.

In Zeile 11 wird der neue Ordner (mit dem gekürzten Namen) erstellt, bzw die Fehlermeldung, wenn er bereits existiert, unterdrückt. Danach werden in den beiden folgenden Schleifen die Inhalte des Ordners in den neuen Ordner verschoben, wobei die Namen der Dateien angepasst werden.

Hinsichtlich der Dateinamen setze ich den beschriebenen Aufbau mit 5 Teilen, getrennt durch "-", von denen der 5. Teil "mitgenommen" werden soll, voraus. Aus den Ordnernamen ließen sich nach dem selben Schema (Trennzeichen allerdings "_") die ersten 4 Teile extrahieren, ich habe mich aber an Deinen Vorschlag mit den ersten 21 Zeichen gehalten.

Verbleibende Fehlerquellen:
  • Dateinamen mit enthaltenen "!"
  • gleichnamige Unterordner der zu verarbeitenden Ordner

Grüße
bastla
Bitte warten ..
Mitglied: Biber
06.08.2013, aktualisiert um 14:25 Uhr
[OT] @bastla

Hab ich schon mal geschrieben, wie sehr ich deine Geduld bewundere?

Ich hatte schon gestern beim Mitverfolgen des Beitragsverlaufs etwas hyperventiliert und auch schon einen mehrzeiligen Kommentar fast fertig geschrieben, der allerdings keine einzige Batchzeile enthielt.

Das kann kann doch nicht sein, dass wir uns absolut planlos von freien Assoziationsketten eines Fragestellers treibenlassen und ihm durch gefühlte 157 suggestive Rückfragen einen Plan unterschieben, für den er sich vorher keine zwei Zehntelsekunden Zeit genommen hat.

@cr0sscut
Das kann ich mir wirklich nicht vorstellen, dass ihr in eurem Laden wirklich so arbeitet - erstmal irgendwie anfangen, dann können wir schon die begonnene Realisierung melden, danach schauen wir uns die Kollateralschäden an und machen ein Folgeprojekt draus.

Von 4 Tagen Laufzeit dieses Beitrags hätten wir - eine Auseinandersetzung mit dem Konzept vorausgesetzt - dreieinhalb einsparen können.

Das musste ich loswerden - dafür habe ich den Beitrag aber nicht in die Tonne gekloppt.

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
06.08.2013 um 12:16 Uhr
[OT] @ Biber
Geduld
Spieltrieb beschreibt's wohl besser ...

Ansonsten hattest Du natürlich (schon ganz oben) wieder einmal Recht.

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: Biber
06.08.2013 um 12:42 Uhr
[auch OT]@ bastla

Okay, bei dir ist es Spieltrieb, aber bei mir setzt bei gewissen Beiträgen ein so genannter Spültrieb ein...

... und nachdem es heute auch eine Fortsetzung von Swanni und die TempTables gibt - den dritten Beitrag dieser Art werde ich wahrscheinlich etwas unangemessen kommentieren.

Grüße
Biber
[/auch OT]
Bitte warten ..
Mitglied: bastla
06.08.2013 um 12:50 Uhr
[weiterhin OT] @ Biber
nachdem es heute auch eine Fortsetzung von Swanni und die TempTables gibt
Ich hatte, als ich gestern Teil 2 gesehen habe, das ja zunächst auf ein hitzebedingtes Déjà-vu meinerseits zurückgeführt ...
den dritten Beitrag dieser Art werde ich wahrscheinlich etwas unangemessen kommentieren.
... was ich wiederum durchaus angemessen fände.

Grüße
bastla
[/weiterhin OT]
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft
Surface Studio im ersten Kurztest

Link von runasservice zum Thema Microsoft ...

VB for Applications
gelöst VBA Text mit Format übertragen und Zeichen ergänzen (11)

Frage von Dau12345 zum Thema VB for Applications ...

Batch & Shell
gelöst Dateiname entsprechend einem um x-Ebenen übergeordeten Ordnernamen umbenennen (3)

Frage von Booster07 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...