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

Zweites Zeichen bei Ordnern und Unterordner ersetzten durch Batch

Frage Entwicklung Batch & Shell

Mitglied: bartosch

bartosch (Level 1) - Jetzt verbinden

08.08.2011 um 10:36 Uhr, 2428 Aufrufe, 14 Kommentare

Hallo zusammen, ich hab ein kleines Problem und ich hoffe ihr könnt mir helfen.

Problembeschreibung:

Ich habe eine leere Ordnerstruktur mit vielen Unterordnern die sehr verzweigt sind. (2500 ordner)

Ich würde gerne eine batch schreiben die sich jeden Ordner anschaut und wenn sie an zweiter Stelle (nur an zweiter Stelle) die zahl 4 findet durch die zahl 5 ersetzt.

Da ich fast keine Erfahrung diesbezüglich habe, hab ich schon Probleme beim Ansatz.

DANKE
bartosch
Mitglied: 60730
08.08.2011 um 10:57 Uhr
Moin,

such doch mal im Forum nach bestimmtes Zeichen in Verzeichnis ersetzen.

Da sollte doch was für dich dabei sein.

Gruß
Bitte warten ..
Mitglied: Friemler
08.08.2011 um 11:18 Uhr
Hallo bartosch,

das sollte so gehen:
01.
@echo off & setlocal 
02.
 
03.
set "SrcDir=E:\Test" 
04.
 
05.
for /d /r "%SrcDir%" %%d in ("?4*.*") do ( 
06.
  set "DirPath=%%d" 
07.
  set "DirName=%%~nxd" 
08.
  call :ProcessDir 
09.
10.
 
11.
exit /b 
12.
 
13.
 
14.
:ProcessDir 
15.
  set "DirName=%DirName:~0,1%5%DirName:~2%" 
16.
  ren "%DirPath%" "%DirName%" 
17.
exit /b
In Zeile 3 das Verzeichnis eintragen, das die Verzeichnisstruktur enthält.

[EDIT]
ACHTUNG! Das Script funktioniert nur, wenn kein Explorerfenster geöffnet ist, in dem kurz vor Ausführung des Scripts durch die zu bearbeitende Verzeichnisstruktur gebrowst wurde. Siehe die folgenden Postings.

Ansonsten hat User Skyemugen eine zwar langsamere aber immer funktionierende Lösung gepostet, mittlerweile ziemlich ans Ende des Threads gerutscht.
[/EDIT]

Gruß
Friemler
Bitte warten ..
Mitglied: Skyemugen
08.08.2011 um 11:45 Uhr
Aloha,

ich hätte da auch etwas im Angebot: dat dauert 'n bissl - getestet mit 8 Hauptordnern und jeweils 6 Ebenen
01.
@echo off & setlocal 
02.
set "Pfad=E:\Skripte\Ablage" 
03.
 
04.
pushd "%Pfad%" 
05.
@for /f "delims=" %%s in ('dir /b /ad') do call :Tauchen "%%s" 
06.
popd 
07.
pause 
08.
exit /b 
09.
 
10.
:Tauchen 
11.
pushd "%~1" 
12.
@for /f "delims=" %%s in ('dir /b /ad') do call :Tauchen "%%s" 
13.
set "Ebene=%cd%" 
14.
set "Ordner=%~1" 
15.
popd 
16.
call :Ablauf "%Ordner%" 
17.
goto :eof 
18.
 
19.
:Ablauf 
20.
set "Name=%~1" 
21.
set "Neu=%Name:~1,1%" 
22.
if "%Neu%" EQU "4" ren "%Ebene%" "%Name:~0,1%5%Name:~2%" 
23.
goto :eof
Eventuell ein wenig umständlich aber so ist das bei mir eben dafür ist es getestet und funktionsfähig.
Die Schwierigkeit ist ja hierbei, dass erst die Child-Ordner umbenannt werden und dann die Parent-Ordner, sonst find' der nix mehr, darum rattert mein Skript auch erst bis zur Unendlichkeit durch und arbeitet sich dann wieder nach oben hin, etwas schlaueres fällt mir auf 'nem Montag erst einmal nicht ein. ^_^

Hm aber mit Suchmaske sollte natürlich schneller sein, muss ich noch einmal testen, ich trau diesen Suchmasken nicht immer ^_^ Lieber doch nicht, dann werden keine Verzeichnisse mehr durchsucht, die dem nicht entsprechen aber eventuell deren Unterordnern, also belass' ich es dabei.

greetz André
Bitte warten ..
Mitglied: bartosch
08.08.2011 um 13:17 Uhr
@Friemler
Hi Danke, habe es ausprobiert passiert aber nix. Es ist auch meiner Meinung nach viel zu schnell, wenn ich die bat aufrufe ist sie schon fertig allerdings ohne Ergebnis.
Bitte warten ..
Mitglied: Friemler
08.08.2011 um 13:50 Uhr
Hallo bartosch,

ich habe nur oberflächlich getestet. Ab einer gewissen Verschachtelungstiefe von umzubenennenden Verzeichnissen funktioniert das Script nicht mehr. Nimm das Script von Skyemugen.

Ich hänge mal eine Verzeichnisstruktur an, bei der es teilweise funktioniert hat, teilweise nicht.
E:\TEST 
├───14test               Fehler 
│   ├───14test           Fehler 
│   │   ├───14test       Fehler 
│   │   │   ├───15test   Erfolg 
│   │   │   └───16test 
│   │   └───16test 
│   │       ├───15test   Erfolg 
│   │       └───16test 
│   └───16test 
│       ├───14test       Fehler 
│       │   ├───15test   Erfolg 
│       │   └───16test 
│       └───16test 
│           ├───15test   Erfolg 
│           └───16test 
└───16test                          Interessant wird es ab hier 
    ├───15test           Erfolg 
    │   ├───15test       Erfolg 
    │   │   ├───15test   Erfolg 
    │   │   └───16test 
    │   └───16test 
    │       ├───15test   Erfolg 
    │       └───16test 
    └───16test 
        ├───15test       Erfolg 
        │   ├───15test   Erfolg 
        │   └───16test 
        └───16test 
            ├───15test   Erfolg 
            └───16test
[EDIT]
Und wie immer gilt: Batchfiles, die nicht machen, was sie sollen, aus einem Konsolenfenster starten und nicht per Doppelklick, damit man auch die Ausgaben sieht. Und zum debuggen zusätzlich noch das ECHO OFF rausnehmen, dann sieht man auch, in welcher Reihenfolge und mit welchem Inhalt die einzelnen Zeilen ausgeführt werden.

Komisch, jetzt funktioniert das Script mit der obigen Verzeichnisstruktur. Hmm, Kopf kratz....
[/EDIT]

Gruß
Friemler
Bitte warten ..
Mitglied: Skyemugen
08.08.2011 um 14:00 Uhr
Aloha Friemler,

stimmt, fiel mir vorhin auf, irgendwann ist ihm der Pfadname zu lang und wird aber leer dargestellt, bei mir hatte er gar nichts umbenannt, sondern gleich den Fehler ausgespuckt, witzigerweise läuft dein Skript jetzt durch, ohne Probleme, durch die ganze Struktur *grübel* hattest du etwas am Code editiert noch? Habe eben neu c&p, davor lief es definitiv nicht.

greetz André

P.S.: So Kombinationen wie /d /r sind mir immer noch spanisch ;D
Bitte warten ..
Mitglied: Friemler
08.08.2011 um 14:10 Uhr
Hallo André,

nein ich habe nichts geändert, aber gerade die gleiche Erfahrung wie Du gemacht (es läuft ).

[EDIT]
Nach ein paar Tests komme ich zu dem Ergebnis, dass der Erfolg oder Misserfolg des Scripts davon abhängt, ob ein Explorerfenster, mit dem kurz vorher durch die zu bearbeitende Verzeichnisstruktur gebrowst wurde, offen ist oder nicht. (Noch mehr Kopf kratz...)

Beispiel
Folgende Verzeichnisstruktur:
E:\TEST 
├───14test 
│   ├───14test 
│   │   ├───14test 
│   │   │   ├───14test 
│   │   │   │   ├───14test 
│   │   │   │   │   ├───14test 
│   │   │   │   │   └───16test 
│   │   │   │   └───16test 
│   │   │   │       ├───14test 
│   │   │   │       └───16test 
│   │   │   └───16test 
│   │   │       ├───14test 
│   │   │       │   ├───14test 
│   │   │       │   └───16test 
│   │   │       └───16test 
│   │   │           ├───14test 
│   │   │           └───16test 
│   │   └───16test 
│   │       ├───14test 
│   │       │   ├───14test 
│   │       │   │   ├───14test 
│   │       │   │   └───16test 
│   │       │   └───16test 
│   │       │       ├───14test 
│   │       │       └───16test 
│   │       └───16test 
│   │           ├───14test 
│   │           │   ├───14test 
│   │           │   └───16test 
│   │           └───16test 
│   │               ├───14test 
│   │               └───16test 
│   └───16test 
│       ├───14test 
│       │   ├───14test 
│       │   │   ├───14test 
│       │   │   │   ├───14test 
│       │   │   │   └───16test 
│       │   │   └───16test 
│       │   │       ├───14test 
│       │   │       └───16test 
│       │   └───16test 
│       │       ├───14test 
│       │       │   ├───14test 
│       │       │   └───16test 
│       │       └───16test 
│       │           ├───14test 
│       │           └───16test 
│       └───16test 
│           ├───14test 
│           │   ├───14test 
│           │   │   ├───14test 
│           │   │   └───16test 
│           │   └───16test 
│           │       ├───14test 
│           │       └───16test 
│           │           ├───14test 
│           │           └───16test 
│           └───16test 
│               ├───14test 
│               │   ├───14test 
│               │   └───16test 
│               └───16test 
│                   ├───14test 
│                   └───16test 
└───16test 
    ├───14test 
    │   ├───14test 
    │   │   ├───14test 
    │   │   │   ├───14test 
    │   │   │   │   ├───14test 
    │   │   │   │   └───16test 
    │   │   │   └───16test 
    │   │   │       ├───14test 
    │   │   │       └───16test 
    │   │   └───16test 
    │   │       ├───14test 
    │   │       │   ├───14test 
    │   │       │   └───16test 
    │   │       └───16test 
    │   │           ├───14test 
    │   │           └───16test 
    │   └───16test 
    │       ├───14test 
    │       │   ├───14test 
    │       │   │   ├───14test 
    │       │   │   └───16test 
    │       │   └───16test 
    │       │       ├───14test 
    │       │       └───16test 
    │       └───16test 
    │           ├───14test 
    │           │   ├───14test 
    │           │   └───16test 
    │           └───16test 
    │               ├───14test 
    │               └───16test 
    └───16test 
        ├───14test 
        │   ├───14test 
        │   │   ├───14test 
        │   │   │   ├───14test   <- Bis zu diesem Verzeichnis im Explorer durchklicken 
        │   │   │   └───16test 
        │   │   └───16test 
        │   │       ├───14test 
        │   │       └───16test 
        │   └───16test 
        │       ├───14test 
        │       │   ├───14test 
        │       │   └───16test 
        │       └───16test 
        │           ├───14test 
        │           └───16test 
        └───16test 
            ├───14test 
            │   ├───14test 
            │   │   ├───14test 
            │   │   └───16test 
            │   └───16test 
            │       ├───14test 
            │       └───16test 
            │           ├───14test 
            │           └───16test 
            └───16test 
                ├───14test 
                │   ├───14test 
                │   └───16test 
                └───16test 
                    ├───14test 
                    └───16test
  • Explorer öffnen und bis zum folgenden Verzeichnis durchklicken:
E:\Test\16test\16test\14test\14test\14test\14test
Man ist dann im oben markierten Verzeichnis.

  • Jetzt im Explorerfenster ins Wurzelverzeichnis von E: wechseln, auch in der Baumansicht links alle Unterzweige von E: schließen.

  • Script aus Konsolenfenster starten -> 3 Fehlermeldungen "Zugriff verweigert"

  • Ergebnis des Scriptlaufs:
E:\TEST 
├───15test 
│   ├───15test 
│   │   ├───15test 
│   │   │   ├───15test 
│   │   │   │   ├───15test 
│   │   │   │   │   ├───15test 
│   │   │   │   │   └───16test 
│   │   │   │   └───16test 
│   │   │   │       ├───15test 
│   │   │   │       └───16test 
│   │   │   └───16test 
│   │   │       ├───15test 
│   │   │       │   ├───15test 
│   │   │       │   └───16test 
│   │   │       └───16test 
│   │   │           ├───15test 
│   │   │           └───16test 
│   │   └───16test 
│   │       ├───15test 
│   │       │   ├───15test 
│   │       │   │   ├───15test 
│   │       │   │   └───16test 
│   │       │   └───16test 
│   │       │       ├───15test 
│   │       │       └───16test 
│   │       └───16test 
│   │           ├───15test 
│   │           │   ├───15test 
│   │           │   └───16test 
│   │           └───16test 
│   │               ├───15test 
│   │               └───16test 
│   └───16test 
│       ├───15test 
│       │   ├───15test 
│       │   │   ├───15test 
│       │   │   │   ├───15test 
│       │   │   │   └───16test 
│       │   │   └───16test 
│       │   │       ├───15test 
│       │   │       └───16test 
│       │   └───16test 
│       │       ├───15test 
│       │       │   ├───15test 
│       │       │   └───16test 
│       │       └───16test 
│       │           ├───15test 
│       │           └───16test 
│       └───16test 
│           ├───15test 
│           │   ├───15test 
│           │   │   ├───15test 
│           │   │   └───16test 
│           │   └───16test 
│           │       ├───15test 
│           │       └───16test 
│           │           ├───15test 
│           │           └───16test 
│           └───16test 
│               ├───15test 
│               │   ├───15test 
│               │   └───16test 
│               └───16test 
│                   ├───15test 
│                   └───16test 
└───16test 
    ├───15test 
    │   ├───15test 
    │   │   ├───15test 
    │   │   │   ├───15test 
    │   │   │   │   ├───15test 
    │   │   │   │   └───16test 
    │   │   │   └───16test 
    │   │   │       ├───15test 
    │   │   │       └───16test 
    │   │   └───16test 
    │   │       ├───15test 
    │   │       │   ├───15test 
    │   │       │   └───16test 
    │   │       └───16test 
    │   │           ├───15test 
    │   │           └───16test 
    │   └───16test 
    │       ├───15test 
    │       │   ├───15test 
    │       │   │   ├───15test 
    │       │   │   └───16test 
    │       │   └───16test 
    │       │       ├───15test 
    │       │       └───16test 
    │       └───16test 
    │           ├───15test 
    │           │   ├───15test 
    │           │   └───16test 
    │           └───16test 
    │               ├───15test 
    │               └───16test 
    └───16test 
        ├───14test                    <- Diese Verzeichnisse wurden eben geöffnet 
        │   ├───14test                <- 
        │   │   ├───14test            <- 
        │   │   │   ├───15test        <- Hier hat es funktioniert 
        │   │   │   └───16test 
        │   │   └───16test 
        │   │       ├───15test 
        │   │       └───16test 
        │   └───16test 
        │       ├───15test 
        │       │   ├───15test 
        │       │   └───16test 
        │       └───16test 
        │           ├───15test 
        │           └───16test 
        └───16test 
            ├───15test 
            │   ├───15test 
            │   │   ├───15test 
            │   │   └───16test 
            │   └───16test 
            │       ├───15test 
            │       └───16test 
            │           ├───15test 
            │           └───16test 
            └───16test 
                ├───15test 
                │   ├───15test 
                │   └───16test 
                └───16test 
                    ├───15test 
                    └───16test
  • Explorerfenster schließen

  • Script nochmals starten

  • Keine Fehlermeldung, Verzeichnisse wurden umbenannt.


Fazit
Da spielt wohl der Verzeichniscache des Explorers eine Rolle.

[/EDIT]

Gruß
Friemler
Bitte warten ..
Mitglied: bartosch
08.08.2011 um 15:29 Uhr
DANKE, soweit ich das beurteilen kann hat das Script alles umbenannt.
Bitte warten ..
Mitglied: Friemler
08.08.2011 um 16:00 Uhr
Hallo André,

ich habe herausgefunden, woran es lag, siehe mein Edit in diesem Posting.

Gruß
Friemler
Bitte warten ..
Mitglied: Skyemugen
08.08.2011 um 16:02 Uhr
Aloha Friemler,

alter Falter, worauf wir demnächst beim Bätscheln wohl noch so achten müssen(?).

Wer kommt auf die Idee vorher den Explorer zu schließen, damit der Cache frei ist ... wtf.

Dann schreibe mal für die Nachwelt noch ein echo soundso ins Skript, damit das keiner übersieht :D

greetz André
Bitte warten ..
Mitglied: Skyemugen
08.08.2011 um 16:03 Uhr
Aloha,

2500 Ordner, hm? Mich würde mal interessieren, wie lange das Skript am Laufen war :D

greetz André
Bitte warten ..
Mitglied: bartosch
08.08.2011 um 16:08 Uhr
Nicht so lange nicht alle Ordner hatten ne 4 an zweiter Stelle ich hab nicht auf die Uhr geschaut aber nach gefühlten 10min war die Sache erledigt.
Bitte warten ..
Mitglied: Skyemugen
08.08.2011 um 16:21 Uhr
Aloha,

na immerhin, das Zeitaufwendigste ist eben der Vergleich der zweiten Stelle per if aber die Hauptsache ist, dass es funktioniert

greetz André
Bitte warten ..
Mitglied: pieh-ejdsch
17.08.2011 um 13:08 Uhr
moin Andrè,

warum sehe ich den T erst jetzt? Na lieber spät als nie.

wenn erst der Tiefste Ordner Umbenannt wird bist Du immer auf der Sicheren Seite.
Frimlers Script mit For /d /r ... da werden die Ordner sicher "on the Fly" in die Variablen gesetzt und der Pfad ist demnach immer Aktuell
anders beim dir wo ja praktisch ein Abild für "offline" ensteht.

Timo (oder Lot) hatte die Sortierung mal so gelöst
Dir /ad /b /s D:\ |sort /r
zuvor hatte ich die Verzeichnisse anders Vorsortiert
Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern
das in der Marke :u müsste mit dem Ersetzt werden:
01.
setlocal enabledelayedexpansion 
02.
if "!new:~1,1!" == "4" set "new=!new:~0,1!5!new~2!" 
03.
endlocal&set "new=%new%"
und mit Paramtetern Pfad\Ordner /d /u starten

aber Deins und Friemlers ist dafür schön Kurz.

das ein Ordner nicht umbenannt werden kann wenn er offen ist weis ja jeder aber wenn der Explorer noch offen ist und der Pfad nicht mehr aktuell ... ? Grübel

Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
VBS oder Batch um eine Datei in Unterordner zu verschieben (1)

Frage von MrRoyal zum Thema VB for Applications ...

Batch & Shell
gelöst Batch for f Befehl erkennt doppelte Zeichen als eines (3)

Frage von Markus5579 zum Thema Batch & Shell ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...