37414
Goto Top

Batchdatei zum kopieren bestimmter Dateien in ein bestimmtes Unterverzeichnis

Guten Tag,

ich habe ein Hauptverzeichnis (HV), in dem 250 Unterverzeichnisse mit unterschiedlichen Namen liegen.
Manche dieser 250 Unterverzeichnisse enthalten ein weiteres Unterverzeichnis (AB3).

Nun würde ich gerne eine Abfrage erstellen, wie folgt:

Wenn in den Unterverzeichnissen von "HV" jeweils ein Verzeichnis "AB3" existiert, sollen alle Dateien mit der Dateiendung ".exe" in das Verzeichnis "AB3" verschoben werden.

Ich denke, verschieben wäre die richtige Funktion, da diese EXE-Dateien später NUR noch im Verzeichnis "AB3" existieren sollen und nicht mehr im jeweiligen Verzeichnis darüber.

Beispiel:

HV\Banane\AB3
HV\Apfel\
HV\Birne\
HV\Erdbeere\AB3
HV\Himbeere\AB3

In diesem Beispiel müßten also nur Dateien im ersten und den beiden letzten Verzeichnissen verschoben werden, da dort jeweils ein Verzeichnis "AB3" existiert.

Danke und schöne Grüße,
imebro

Content-Key: 227131

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

Printed on: May 4, 2024 at 00:05 o'clock

Member: colinardo
Solution colinardo Jan 20, 2014 updated at 12:41:24 (UTC)
Goto Top
Hallo imebro,
könntest du so mit Batch machen, wenn die EXE-Dateien jeweils in den Unterverzeichnen des HV liegen: HV\Banane\*.exe:
@echo off
for /D %%a in ("C:\HV\*") do @(  
  if exist "%%a\AB3" (move "%%a\*.exe" "%%a\AB3\")  
)
und hier noch das selbe mit Powershell falls das benötigt wird:
$hv = "C:\HV"  
gci $hv | ?{$_.PSIsContainer -and test-path "$($_.FullName)\AB3"} | %{move-item "$($_.FullName)\*.exe" "$($_.FullName)\AB3" }  
Grüße Uwe
Mitglied: 37414
37414 Jan 20, 2014 updated at 12:22:24 (UTC)
Goto Top
Hallo Uwe,

danke Dir für die schnelle Antwort.
Bei einem Test mit 3 Test-Verzeichnissen, hat das super funktioniert mit der Batch-Variante.

Was muss ich denn eingeben, um am Ende auch noch eine LOG-Datei zu erhalten, um prüfen zu können, ob alles OK ist?

Würde es dazu reichen, am Ende - also hinter die letzte Klammer - einfach folgendes einzutragen:

">> C:\AB3Log.txt"

Danke und Gruss,
imebro
Member: colinardo
Solution colinardo Jan 20, 2014 updated at 12:45:51 (UTC)
Goto Top
wenn nur Fehler geloggt werden sollen machst du es so in der Move-Zeile
if exist "%%a\AB3" (move "%%a\*.exe" "%%a\AB3\" 2>>"C:\AB3Log.txt")  
Mit etwas mehr Info zum Verzeichnis wo der Fehler aufgetreten ist (Die Fehlermeldungen von Move sind nämlich sehr spärlich):
@echo off
for /D %%a in ("C:\HV\*") do @(  
  if exist "%%a\AB3" (  
   echo "Verarbeite Verzeichnis '%%a' >>"C:\AB3Log.txt"  
   move "%%a\*.exe" "%%a\AB3\"  2>>"C:\AB3Log.txt"  
  )
)
Grüße Uwe
Mitglied: 37414
37414 Jan 20, 2014 at 12:41:07 (UTC)
Goto Top
Super... vielen Dank.

Hat perfekt funktioniert und ich bin überrascht über die Geschwindigkeit.
Offenbar geht das verschieben per "move" extrem viel schneller, als wenn ich die Dateien kopiert und später im Überverzeichnis gelöscht hätte.

Danke und Gruss,
imebro
Member: colinardo
colinardo Jan 20, 2014 updated at 12:44:29 (UTC)
Goto Top
Zitat von @37414:
Hat perfekt funktioniert und ich bin überrascht über die Geschwindigkeit.
Offenbar geht das verschieben per "move" extrem viel schneller, als wenn ich die Dateien kopiert und später im Überverzeichnis gelöscht hätte.
hierbei wird ja nur der Eintrag in der MFT der Festplatte geändert und keine Bits verschoben weil die Daten auf der selben Partition beiben face-wink deshalb so schnell.
Mitglied: 37414
37414 Jan 20, 2014 at 13:09:40 (UTC)
Goto Top
OK - verstehe face-wink

Eine Verständnisfrage noch.
Ich wollte eben noch (zunächst testweise) in allen Verzeichnissen, in denen ".exe"-Dateien existieren, ein Unterverzeichnis mit dem Namen "AB3" anlegen.

Dazu habe ich folgendes getestet... leider erfolglos:

for /D %%a in ("C:\HV\HV1\*") do @(

if exist "%%a\.exe" (mkdir "C:\HV\HV1" "%%a\AB3\")

)

Danke und Gruss,
imebro
Member: colinardo
colinardo Jan 20, 2014 updated at 13:14:32 (UTC)
Goto Top
@echo off
for /D %%a in ("C:\HV\HV1\*") do @(  
  if exist "%%a\*.exe" md "%%a\AB3"  
)
Grüße Uwe
Mitglied: 37414
37414 Jan 20, 2014 at 13:19:42 (UTC)
Goto Top
Danke nochmals...

Da hab ich es mir wohl schwieriger gemacht, als nötig face-smile

Danke nochmals und schöne Grüße,
imebro