kostenloser Webspace werbefrei: lima-city


batch: alle Unterordner umbennenn ?

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    kreditwunsch

    kreditwunsch hat kostenlosen Webspace.

    Hallo

    ich möchte (unter Win7) per batch-Datei alle Unterordner eines Ordners umbennen

    genauer gesagt, einen Prefix entfernen, der am Beginn jedes Unterodners steht
    der Prefix ist dabei immer der gleiche, hier im Beispiel ist er daten_

    Vorher:

    - Ordner/
    --- daten_AAA/
    --- daten_BBB/
    --- daten_CCC/
    --- daten_DDD/

    ... soll werden zu:

    - Ordner/
    --- AAA/
    --- BBB/
    --- CCC/
    --- DDD/


    also ich brauche eine batch-Datei, die in dem Ordner, in dem sie ausgeführt wird
    alle Unterordner umbenennen kann, also den Prefix "_daten" aus jedem Unter-Ordner-Name entfernt

    habe schon bei google gesucht, soch leider kein passendes Beispiel gefunden
    da ging es immer nur um Dateien umbennenen, nicht um Ordner (Verzeichnisse)

    kann mir jemand so einen batch Code hier posten, der das kann ?
    Danke!

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Du kannst in der Commandozeile im aktuellen Verzeichnis eingeben:
    for /f "delims"_ tokens=2" %a in ('dir /b .') do ren daten_%a %a


    Solltest du dir eine Batchdatei machen, auf die du beispielsweise ein Verzeichnis ziehst, müsstest du ein % mehr machen, und auf den Parameter reagieren. Der Inhalt der batch-Datei würde etwa so aussehen:
    for /f "delims"_ tokens=2" %aa in ('dir /b %1') do ren daten_%%a %%a
  4. Autor dieses Themas

    kreditwunsch

    kreditwunsch hat kostenlosen Webspace.

    Danke

    schonmal ein Anfang, nur habe ich dabei noch ein Problem ...

    die Ordner-Namen nach dem Prefix enthalten teilweise auch wieder einen Unterstrich

    - Ordner/
    --- daten_AAA/
    --- daten_BBB/
    --- daten_BBB_2/
    --- daten_CCC/
    --- daten_CCC_2/

    zum Test habe ich erstmal Ausgabe mit echo anstatt REN gemacht

    @echo off
    
    for /f "tokens=2 delims=_" %%a in ('dir /b %1') do echo daten_%%a --- %%a
    
    pause


    bei der Ausgabe wird damit der letzte Teil des Ordnername abgetrennt
    alles ab dem zweiten _ (Unterstrich) geht verloren

    daten_AAA --- AAA
    daten_BBB --- BBB
    daten_BBB_2 --- BBB
    daten_CCC ---  CCC
    daten_CCC_2 --- CCC


    dadurch würde also der Ordner BBB_2 "nur" (bzw. auch) in BBB umbenannt, usw.
    also der Teil des Ordner-Namens ab dem zweiten _ (Unterstrich) fehlt ...
    ... und das führt dann zu Fehler / Datenverlust

    habe dann versucht es so zu machen, damit der "dritte" Teil mit verarbeitet wird
    ... aber klappt nicht, ist falsch:

    for /f "tokens=2,3 delims=_" %%a , %%b in ('dir /b %1') do echo daten_%%a_%%b  --- %%a_%%b


    wie kann ich also beim splitten mit dem Trenner _ auch das dritte Element verarbeiten?

    bzw. anders gefragt: wie bleibt der Verzeichnis-Name nach dem Prefix komplett erhalten ?

    ich hoffe Ihr könnt mir helfen
    Danke


  5. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    in diesem Fall würde ich den Umweg über eine Variable nehmen, und dieser mit SET die ersten 6 Zeichen (daten_) abschneiden:
    http://de.wikibooks.org/wiki/Batch-Programmierung:_Erweiterungen_unter_Windows_NT#Stringmanipulation
  6. Autor dieses Themas

    kreditwunsch

    kreditwunsch hat kostenlosen Webspace.

    Danke

    weiteres Problem ... der Hauptordner enthält auch schon Unterordner ohne den Prefix
    wenn ich also einfach die erten n Zeichen abschneide, dann zerschiesst es diese

    jetzt bin ich immerhin soweit, das nur die betroffenen Verzeichnisse ausgegeben werden
    (nur Ordner die den Teilstring "daten_" enthalten)

    @echo off
    for /F "usebackq" %%a in (`dir /a:d /b`) do ( 
    echo %%a | find "daten_"
    echo.
    )
    echo.
    pause

    das klappt, bur betroffenen Ordnernamen werden ausgegeben


    aber ich bekomme es nicht hin, anstatt mit echo einfach auszugeben
    das Ergebnis in eine Variable zu setzen, um damit dann weiter arbeiten zu können

    mein Versuch (der nicht geht)

    @echo off
    for /F "usebackq" %%a in (`dir /a:d /b`) do ( 
    SET treffer = %%a | find "daten_"
    echo %treffer%
    echo.
    )
    echo.
    pause


    damit bekomme ich nur die Meldung: Echo ist ausgeschalten (Off)
    ???

    sorry, aber batch check ich leider grad NULL ...

    wie hole ich mir das Ergebnis von find ineine Variable
    damit ich dann von dieser den Teilstring abschneiden kann für REN

    set neuname = %treffer:~6%
    REN %treffer% %neuname%

    ... oder wie sonst ?

  7. Hallo,

    kreditwunsch schrieb:
    ... oder wie sonst ?
    das was du da machst ist nicht ganz trivial, Infos dazu gibt es z.B. hier. Es hängt wohl damit zusammen, wann die Variablen in Werte aufgelöst werden.

    Ich denke so kannst du dein Problem lösen:

    SETLOCAL ENABLEDELAYEDEXPANSION
    for /f %%a in ('dir /ad /b "daten_*"') do (set r=%%a && set r=!r:~6! && ren %%a !r!)


    Gruß
  8. Autor dieses Themas

    kreditwunsch

    kreditwunsch hat kostenlosen Webspace.

    wow, super, Danke

    damit funktioniert es

    die Kür wäre jetzt noch

    dass man den Prefix als Variable setzen kann (oder als User-Eingabe übergeben kann)

    und die Länge des gesetzen Prefix gezählt wird (Anzahl Buchstaben für die rename Variable)

    so, dass man es für jeden beliebigen Prefix verwenden kann,
    aber wie gesagt, das wäre die Kür, da man es ja eher selten braucht

  9. Hallo,

    wie sagt man so schön: "Der Wunsch ist Vater vieler Kinder" ;).
    Hier kannst du entweder die Variable ändern oder mein.bat daten aufrufen.
    @echo off
    
    set pref=daten_
    IF [%1] ==[] (call :rendirs %pref%) else (call :rendirs %1)
    goto :eof
    
    :rendirs
    for /f %%a in ('dir /ad /b "%~1*"') do (call :rename %%a %~1 )
    goto :eof
    
    :rename
    set "oldname=%~1"
    call set "newname=%%oldname:*%~2=%%"
    echo renaming %oldname% 	to 	%newname%
    ren %oldname% %newname%

    Gruß
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!