Batch: Kopieren mit teilweise unbekanntem Ziel?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

@echo off

set "Quelle=C:\Users\Peter\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\icons\icon_48.png"

set "Zielbasis=C:\Users\Peter\AppData\Local\Google\Chrome\User Data\Default\Extensions\oeopbcgkkkdasdawemjljbihmemj\"

for /d %%a in ("%Zielbasis%\*") do (

 xcopy /Q /C /H /R /Y "%Quelle%" "%%a\images\icons\"

)


Wasist6 
Beitragsersteller
 09.07.2024, 10:05

Hat funktioniert. Vielen Dank für die schnelle Hilfe 😊

demo.cmd

@echo off
chcp 65001 >nul
 rem Ordner/Datei woher die daten kommen...
set "Source=%AppData%\Microsoft\Windows\Start Menu\Programs\icons\icon_48.png"
 rem Ordner aus dem der (Unter)Ordner mit unbekanntem Namen ermittelt werden soll: 
set "SearchFolder=%LocalAppData%\Google\Chrome\User Data\Default\Extensions\oeopbcgkkkdasdawemjljbihmemj"
 rem ermittle OrdnerNamen unter dem angegebene Suchpfad, (hoffendlich ist es wirklich der einzige 🙄)
for /f "tokens=*" %%a in (' dir /b /ad "%SearchFolder%"') do (
  echo UnterVerzeichnisName gefunden: "%%a" &rem nur mal anzeigen
  echo Die Datei ^(en^) werden nach: "%SearchFolder%\%%a\images\icons\" !  &rem ermittelten Pfad nur mal zum testen anzeigen.
  rem wenn das Kommando und die Pfade dir richtig erscheint, entferne das "echo" vor der nächsten Zeile.
  echo xcopy /QCHRY "%Source%" "%SearchFolder%\%%a\images\icons\"
)
pause

falls es mehrere Ordner unter dem angegebenen Ordner geben sollte. Kann man beispielsweise versuchen den/die Ordner zu emitteln, welche den (Teil)Pfad "\images" enthalten.

@echo off
chcp 65001 >nul
set "Source=%AppData%\Microsoft\Windows\Start Menu\Programs\icons\icon_48.png"
set "SearchFolder=%LocalAppData%\Google\Chrome\User Data\Default\Extensions\oeopbcgkkkdasdawemjljbihmemj"

 rem suche Ordner unter dem angegebene Suchpfad, welche den Ordner Images enthalten
for /f "tokens=*" %%a in (' dir /s /b /ad "%SearchFolder%"^|find "\images" ') do (
  echo Die Datei ^(en^) werden nach: "%%a\icons\" kopiert!  &rem ermittelten Pfad nur mal zum testen anzeigen.
  rem wenn das Kommando und die Pfade dir richtig erscheint, entferne das "echo" vor der nächsten Zeile.
  echo xcopy /QCHRY "%Source%" "%%a\images\icons\"
)
pause

Im schlechtesten Fall gibt es mehrere Ordner auf die die find-Bedingung zutrifft, dann wird eben eine copie in jeden der gefundenen Ordner platziert (ach nicht besonders wild.

unter %LocalAppData%\Google\Chrome\User Data\Default\Extensions gibt es mehr Ordner mit mehr oder weniger cryptischen Namen

wenn Du alle in die suche einbeziehen möchtest kannst Du unter der Voraussetzung das der Icons-Ordner immer in deiner Extension existiert auch eine "Etage höher" mit der Suche beginnen und im find-Filter "\images\icons" definieren.

Das Prinzip ist das Gleiche

demo.cmd

@echo off
chcp 65001 >nul
set "Source=%AppData%\Microsoft\Windows\Start Menu\Programs\icons\icon_48.png"
 rem  diesmal beninnen  wir  eine Etage höher mit der  suche,  ferfeinern  aber den find-Filter
set "SearchFolder=%LocalAppData%\Google\Chrome\User Data\Default\Extensions"
 rem suche Ordner unter dem angegebene Suchpfad, welche  den Ordner "Images/Icons" enthalten
for /f "tokens=*" %%a in (' dir /s /b /ad "%SearchFolder%"^|find "\images\icons" ') do (
    echo Die Datei ^(en^) werden nach: "%%a\icons\" kopiert!
    echo xcopy /QCHRY "%Source%" "%%a\"
)
pause

unerwünschtes kann nicht passieren, da xcopy in diesem zustand nicht ausgeführt wird! Erst nach dem entfernen von "echo" for xcopy wird das Kommando scharf.

Du kannst so beliebig mit den Pfaden und Filtern herumspielen

  • die Variablen %AppData" zielt immer auf den Pfad "C:\Users\EinName\AppData\Roaming\"
  • die Variablen %LocalAppData" zielt immer auf den Pfad "C:\Users\EinName\AppData\Local"
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

MasterFAQ  10.07.2024, 01:05

Was hastn du da gebaudd? xd halbe bibel jonge

Erzesel  10.07.2024, 06:28
@MasterFAQ

Angesichts dessen, das (erfahrungsgemäß) die meisten Fragesteller keine Ahnung von Batch (und vor allem for-Loops) haben , hab ich mir angewöhnt die Leute nicht mit einem lapidaren Codeschnipsel auf die weitere Reise zu schicken.

Es gibt gute Gründe, weshalb ich nicht den for/d-Loop nutze. Dieser hat einige Bugs und scheitert bei der Rückgabe von einiger Ordnernamen.

Davon scheinst Du wiederum nichts gehört zu haben... Da ich die Konstellation beim Fragesteller nicht kenne geh ich auf Nummer sicher.

...egal, für den Fragesteller funktioniert Deine Variante.

Was solls..., es macht mir keine besondere Mühe mehrere Optionen aufzuführen, ein Paar Kommentare und "Debug"-Ausgaben für "Anfänger" einzubauen. ...und eine Flexibilisierung über Ordnervariablen macht einen Fragesteller in der Regel nicht dümmer....

MasterFAQ  14.07.2024, 21:50
@Erzesel

Hallo Erzesel,

danke für deine ausführliche Antwort, aber ein einfacher Ansatz hätte gereicht. Der Fragesteller wollte keine Doktorarbeit über Batch-Skripte, sondern eine schnelle und effektive Lösung.

Mein simpler

for /d

-Loop hat funktioniert und der Fragesteller war zufrieden. Es ist beeindruckend, dass du deine umfangreichen Kenntnisse zur Schau stellen willst, aber manchmal ist weniger mehr. Dein komplexer Ansatz kann Anfänger eher verwirren als ihnen zu helfen.

Ist Richtig, verschiedene Optionen zu haben, aber bitte spar dir die überflüssigen Kommentare und die unnötige Komplexität, wenn eine einfache Lösung ausreicht. In der Praxis geht es oft darum, schnell und effizient zu helfen, ohne gleich eine Abhandlung zu schreiben.

Grüße, MasterFAQ