Unterverzeichnisse finden und umbenennen und Dateien verschieben
Hallo Batch-Experten
ich hab folgende Aufgabe:
Unterverzeichnisse der 3. Ebene umbenennen und Dateien daraus in ein anderes Unterverzeichnis verschieben. Also konkret am Beispiel
Verzeichnis: C:\Alles
Habe mir schon verschiedene Beispiele mit move und rename hier angesehen, bekomme es aber aufgrund mangelnder Batch-Programmier-Kenntnisse einfach nicht hin- Wie wechsel ich am besten in die entsprechenden Unterverzeichnisse, suche nach dem Verzeichnis, das mit 5_7_ anfängt und verschiebe von dort in das Verzeichnis 5_8 des selben Zweigs?
Vielen Dank
Gruß Josh
ich hab folgende Aufgabe:
Unterverzeichnisse der 3. Ebene umbenennen und Dateien daraus in ein anderes Unterverzeichnis verschieben. Also konkret am Beispiel
Verzeichnis: C:\Alles
- Unterverzeichnis A1
- Unterverzeichnis 5_7_Plana
- Unterverzeichnis 5_8_Planb
- Unterverzeichnis B1
- Unterverzeichnis 5_7_Plana
- Unterverzeichnis 5_8_Planb
Habe mir schon verschiedene Beispiele mit move und rename hier angesehen, bekomme es aber aufgrund mangelnder Batch-Programmier-Kenntnisse einfach nicht hin- Wie wechsel ich am besten in die entsprechenden Unterverzeichnisse, suche nach dem Verzeichnis, das mit 5_7_ anfängt und verschiebe von dort in das Verzeichnis 5_8 des selben Zweigs?
Vielen Dank
Gruß Josh
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 19.11.2009 um 20:59:10 Uhr
Auch im Sourcecode wird der running gag counter natürlich hochgepusht...
Merke: ich bennene um, du bennenst um, er/sie/es bennent um...
#rgc = 627
wscript.echo K & ": Bennene " & NeuPfad(k) & " um in: " & NeuPfadNeu
Merke: ich bennene um, du bennenst um, er/sie/es bennent um...
#rgc = 627
Content-ID: 129458
Url: https://administrator.de/contentid/129458
Ausgedruckt am: 17.11.2024 um 00:11 Uhr
8 Kommentare
Neuester Kommentar
hallo josken69,
gesetz dem Fall, deine Ordnerstruktur bleibt wie besagt und die Namen der Ordner ist ähnlich dann müsste folgendes Script in VBS bei dir funktionieren:
Zum Testen hatte ich mir folgende Ordnerstruktur angelegt:
C:\Alles\
Unterordner1\
Plan_a\
Plan_b\
Unterordner2\
Plan_a\
Plan_b\
Unterordner3\
Plan_a\
Plan_b\
Unterordner4\
Plan_a\
Plan_b\
usw. In jeweils der Ordner "Plan_a" habe ich mehrere verschiedene Dateien abgelegt.
Das Script verschiebt alle Dateien vom Ordner Plan_a nach Plan_b und bennent nur den Ordner Plan_a nach Plan_xyz um.
Du kannst dir das Script noch anpassen.
Gruss
Tsuki
Ps.: es ist egal, wie die beiden Ordner der Ebenen 1 und 2 heißen! Wichtig ist nur, das die 2 Ordner in Ebene3 als erstes der ordner mit den dateien kommt und als 2tes der leere Ordner. Habe mich an deine Vorgabe gehalten!
gesetz dem Fall, deine Ordnerstruktur bleibt wie besagt und die Namen der Ordner ist ähnlich dann müsste folgendes Script in VBS bei dir funktionieren:
Dim Pfadangabe, Ordner, NeuPfad(10000), I
Ordner = InputBox("Bitte Pfad eingeben","...","D:\Alles\")
set fs = createobject("Scripting.FileSystemObject")
I = 0
Listordner Ordner
Sub ListOrdner(ordner)
Set ordner = fs.getfolder(ordner)
'On Error resume next
For Each file In ordner.files
Pfadangabe =File.path
PfadNeu = split(Pfadangabe , "\")
If Ubound(PfadNeu) = 4 then
DateiName = PfadNeu(Ubound(PfadNeu))
PfadNeuF = PfadNeu(0) & "\" & PfadNeu(1) & "\" & PfadNeu(2) & "\" & Left(PfadNeu(3),len(PfadNeu(3))-1) & "b\" & Dateiname
'wscript.echo Pfadangabe & " verschoben nach --> " & PfadNeuF
FS.MoveFile Pfadangabe , PfadNeuF
End If
Next
For Each Unterordner In Ordner.subfolders
PfadNeu = split(Pfadangabe , "\")
If Ubound(PfadNeu) = 4 then
NeuPfad(i) = PfadNeu(0) & "\" & PfadNeu(1) & "\" & PfadNeu(2) & "\" & PfadNeu(3)
I = I + 1
End if
Pfadangabe = unterordner.path
Listordner unterordner
next
End Sub
for k = 0 to I - 1
NeuPfadNeu = neupfad(k)
NeuPfadNeu = Left(NeuPfadNeu,Len(NeuPfadNeu) - 1) & "xyz"
'wscript.echo K & ": Bennene " & NeuPfad(k) & " um in: " & NeuPfadNeu
FS.MoveFolder NeuPfad(k) , NeuPfadNeu
k = k + 1
next
msgbox "Fertig"
C:\Alles\
Unterordner1\
Plan_a\
Plan_b\
Unterordner2\
Plan_a\
Plan_b\
Unterordner3\
Plan_a\
Plan_b\
Unterordner4\
Plan_a\
Plan_b\
usw. In jeweils der Ordner "Plan_a" habe ich mehrere verschiedene Dateien abgelegt.
Das Script verschiebt alle Dateien vom Ordner Plan_a nach Plan_b und bennent nur den Ordner Plan_a nach Plan_xyz um.
Du kannst dir das Script noch anpassen.
Gruss
Tsuki
Ps.: es ist egal, wie die beiden Ordner der Ebenen 1 und 2 heißen! Wichtig ist nur, das die 2 Ordner in Ebene3 als erstes der ordner mit den dateien kommt und als 2tes der leere Ordner. Habe mich an deine Vorgabe gehalten!
Hallo josken69,
berichtige mich, wenn ich deinem Gedankengang immer noch nicht ganz gefolgt bin.
Hier nochmal meine Version deiner Ausgangssituation:
1) Ein Hauptordner (in deinem Beispiel: C:\Alles)
2) Hauptordner hat mehrere Unterordner (2.Ebene)
3) Die Ordner 2. Ebene haben jeweils 2 Ordner (3.Ebene {5_7_etc und 5_8_etc)
4) Es sollen alle Dateien (falls vorhanden) von Ordner 5_7_etc nach 5_8_etc verschoben werden
5) Ordner 5_7_ und Ordner 5_8_ sollen jeweils umbenannt werden
6) In alle Ordner von Ordner 2. Ebene sollen neue Ordner nach dem Muster 5_9_etc erstellt werden.
Nach diesen Gedankengang und im Zusammenschluss unserer beiden vorhergehenden Scripte habe ich folgendes
zusammengefasst:
Die "Aktionen" (also verschieben, Ordner anlegen etc.) habe ich erst einmal auskommentiert und es werden nur Meldungen ausgegeben, was gemacht werden würde (2.Stufe Konjunktiv )
Zum Testen speichere doch bitte mal den Script in eine VBS-File (.z.Bsp.: Josken.vbs)
Dann lege dir in dem gleichen Pfad wie das Script eine Batchdatei an mit folgendem Inhalt:
Diese läßt den Script im "Trockenlauf durchfahren und legt dir eine Logdatei an.
In dieser Logdatei kannst du erst einmal nachsehen, ob das Script im groben das machen würde, was es soll.
Wenn dem so sein sollte, dann nimm die "Kommentare" weg ( " ' " ) vor den "Aktionen" und teste das Script mal
durch.
Achtung, damit du nicht soviel "OK" drücken musst, kommentiere alle "WScript.Echos" aus!
Warte auf dein Feedback
Gruss
Tsuki
berichtige mich, wenn ich deinem Gedankengang immer noch nicht ganz gefolgt bin.
Hier nochmal meine Version deiner Ausgangssituation:
1) Ein Hauptordner (in deinem Beispiel: C:\Alles)
2) Hauptordner hat mehrere Unterordner (2.Ebene)
3) Die Ordner 2. Ebene haben jeweils 2 Ordner (3.Ebene {5_7_etc und 5_8_etc)
4) Es sollen alle Dateien (falls vorhanden) von Ordner 5_7_etc nach 5_8_etc verschoben werden
5) Ordner 5_7_ und Ordner 5_8_ sollen jeweils umbenannt werden
6) In alle Ordner von Ordner 2. Ebene sollen neue Ordner nach dem Muster 5_9_etc erstellt werden.
Nach diesen Gedankengang und im Zusammenschluss unserer beiden vorhergehenden Scripte habe ich folgendes
zusammengefasst:
Dim Ordner
Dim NeuPfad()
Dim PfadBisEbeneZwei(100) , IPfade2
Dim PfadBisEbeneDrei(100) , IPfade3
Dim PfadKomplett(100,1)
Dim Pfad5_7_Anhaengsel , Pfad5_8_Anhaengsel
Dim NeuOrdner5_9_Neu
Dim SucheStrA , SucheStrB
Dim PfadAngabe
Ordner = InputBox("Bitte Pfad eingeben","...","C:\Alles\")
Pfad5_7_Anhaengsel = "5_7_LinienPlaene"
Pfad5_8_Anhaengsel = "5_8_Energie_Abwasser_Absperrplan"
SucheStrA = "5_7_"
SucheStrB = "5_8_"
set fs = createobject("Scripting.FileSystemObject")
IPfade2 = 1
IPfade3 = 1
Listordner Ordner
Sub ListOrdner(ordner)
Set ordner = fs.getfolder(ordner)
For Each file In ordner.files
'Pfadangabe =File.path
next
For Each Unterordner In Ordner.subfolders
Pfadangabe = unterordner.path
PfadNeu = split(Pfadangabe , "\")
If Ubound(PfadNeu) = 3 then
Temp1 = InStr(Pfadangabe,SucheStrA)
If Not Temp1 = 0 then
PfadBisEbeneDrei(IPfade3) = Pfadangabe
IPfade3 = IPfade3 + 1
End If
Temp2 = InStr(Pfadangabe,SucheStrB)
If Not Temp2 = 0 then
PfadBisEbeneDrei(IPfade3) = Pfadangabe
IPfade3 = IPfade3 + 1
End If
'50:
Temp = PfadNeu(0) & "\" & PfadNeu(1) & "\" & PfadNeu(2) & "\"
If Not Temp = PfadBisEbeneZwei(IPfade2 -1) Then
PfadBisEbeneZwei(IPfade2) = TemP
IPfade2 = IPfade2 + 1
End If
End if
Listordner unterordner
Next
End Sub
For m = 0 to UBound(PfadBisEbeneDrei)
If not PfadBisEbeneDrei(m) = "" Then
PfadKomplett(m,0) = PfadBisEbeneDrei(m)
PfadKomplett(m,1) = PfadBisEbeneDrei(m + 1)
Set Ordner = fs.GetFolder(PfadKomplett(m,0))
For Each file In ordner.files
Pfadangabe = File.path
PfadNeu = split(Pfadangabe , "\")
DateiName = PfadNeu(Ubound(PfadNeu))
WScript.Echo "Verschiebe Datei:" & PfadKomplett(m,0) & "\" & DateiName & " nach: " & PfadKomplett(m,1) & "\" & DateiName
'FS.MoveFile PfadKomplett(m,0) & "\" & DateiName , PfadKomplett(m,1) & "\" & DateiName
Next
Pfadangabe = PfadBisEbeneDrei(m)
PfadNeu = split(Pfadangabe , "\")
PfadKomplettNeu = PfadNeu(0) & "\" & PfadNeu(1) & "\" & PfadNeu(2)& "\" & Pfad5_7_Anhaengsel
WScript.Echo "Benenne Pfad: " & PfadKomplett(m,0) & " um nach: " & PfadKomplettNeu
'FS.MoveFolder PfadKomplett(m,0) , PfadKomplettNeu
PfadKomplettNeu = PfadNeu(0) & "\" & PfadNeu(1) & "\" & PfadNeu(2)& "\" & Pfad5_8_Anhaengsel
WScript.Echo "Benenne Pfad: " & PfadKomplett(m,1) & " um nach: " & PfadKomplettNeu
'FS.MoveFolder PfadKomplett(m,1) , PfadKomplettNeu
m = m + 1
End If
Next
For l = 0 to UBound(PfadBisEbeneZwei)
If not PfadBisEbeneZwei(l) = "" Then
NeuOrdner5_9_Neu = PfadBisEbeneZwei(l) & "5_9_Uebersichtsplan"
If Not fs.FolderExists(NeuOrdner5_9_Neu) then
WScript.Echo "Erstelle Neuen Ordner:" & NeuOrdner5_9_Neu
'NeuOrdner5_9_Neu = fs.CreateFolder(NeuOrdner5_9_Neu)
End if
End If
Next
WScript.Echo "Fertig"
Die "Aktionen" (also verschieben, Ordner anlegen etc.) habe ich erst einmal auskommentiert und es werden nur Meldungen ausgegeben, was gemacht werden würde (2.Stufe Konjunktiv )
Zum Testen speichere doch bitte mal den Script in eine VBS-File (.z.Bsp.: Josken.vbs)
Dann lege dir in dem gleichen Pfad wie das Script eine Batchdatei an mit folgendem Inhalt:
Echo %Date% >Log.txt
CScript Josken.vbs >>Log.txt
In dieser Logdatei kannst du erst einmal nachsehen, ob das Script im groben das machen würde, was es soll.
Wenn dem so sein sollte, dann nimm die "Kommentare" weg ( " ' " ) vor den "Aktionen" und teste das Script mal
durch.
Achtung, damit du nicht soviel "OK" drücken musst, kommentiere alle "WScript.Echos" aus!
Warte auf dein Feedback
Gruss
Tsuki
Gerne doch!
Scripten macht Spass.
Wenn du noch Anregungen brauchst, einfach posten.
Noch einen Hinweis: Folgender Fall ist in dem Script nicht abgefangen:
Im Ordner 5_8_etc. existiert schon eine Datei mit dem gleichen Namen aus Ordner 5_7_etc.
Dann bricht das Script ab.
Falls du diesen Fall haben solltest, dann könnte dies mit einer Fehlerauswertung abgefangen werden
und zum Beispiel die schon existierende Datei gnadenlos überschrieben werden, wie folgt
Zeile 73 bis 75 so verändern:
Melde dich einfach, wenn noch was ist.
Gruss
Tsuki
Scripten macht Spass.
Wenn du noch Anregungen brauchst, einfach posten.
Noch einen Hinweis: Folgender Fall ist in dem Script nicht abgefangen:
Im Ordner 5_8_etc. existiert schon eine Datei mit dem gleichen Namen aus Ordner 5_7_etc.
Dann bricht das Script ab.
Falls du diesen Fall haben solltest, dann könnte dies mit einer Fehlerauswertung abgefangen werden
und zum Beispiel die schon existierende Datei gnadenlos überschrieben werden, wie folgt
Zeile 73 bis 75 so verändern:
On error resume next
WScript.Echo "Verschiebe Datei:" & PfadKomplett(m,0) & "\" & DateiName & " nach: " & PfadKomplett(m,1) & "\" & DateiName
FS.MoveFile PfadKomplett(m,0) & "\" & DateiName , PfadKomplett(m,1) & "\" & DateiName
If Err.Number <> 0 Then 'Fuer den Fall, dass Zieldatei schon exisitiert!
Wscript.Echo "******************Fehler****************** Start "
Wscript.Echo "Datei: " & Dateiname & " existiert in " & PfadKomplett(m,1) & " schon."
Err.Clear
Set objFileCheck = fs.GetFile(PfadKomplett(m,1) & "\" & DateiName)
Wscript.Echo "Loesche: " & PfadKomplett(m,1) & "\" & DateiName
objFileCheck.Delete ()
WScript.Echo "Verschiebe Datei:" & PfadKomplett(m,0) & "\" & DateiName & " nach: " & PfadKomplett(m,1) & "\" & DateiName
FS.MoveFile PfadKomplett(m,0) & "\" & DateiName , PfadKomplett(m,1) & "\" & DateiName
Wscript.Echo "******************Fehler****************** Ende "
End If
Melde dich einfach, wenn noch was ist.
Gruss
Tsuki
Hallo josken69,
keine Ursache!
Gut zu wissen, dass es funktioniert und macht, was du möchtest.
Wenn du noch Fragen hast, du kannst ja eine Nachricht direkt an mich schreiben, ohnen einen neuen Thread aufzumachen.
Dann kann ich etwaige Schritte in meinem Script noch näher erklären.
Ich bin im Scripten auch nicht perfekt - ehr ein beginner.
Gruss
Tsuki
keine Ursache!
Gut zu wissen, dass es funktioniert und macht, was du möchtest.
Wenn du noch Fragen hast, du kannst ja eine Nachricht direkt an mich schreiben, ohnen einen neuen Thread aufzumachen.
Dann kann ich etwaige Schritte in meinem Script noch näher erklären.
Ich bin im Scripten auch nicht perfekt - ehr ein beginner.
Gruss
Tsuki