Dateien in ein Verzeichnis kopieren, wenn ich den gesamten Pfad nicht kenne

Dateien in ein Verzeichnis kopieren, wenn ich den gesamten Pfad nicht kenne

Ich habe eine Anwendung, die beim Öffnen ein Verzeichnis mit einigen Dateien darin generiert. Ich möchte auf einige Dateien in diesem Verzeichnis zugreifen, um sie zu exportieren und auch in dieses Verzeichnis zu importieren. Die Verzeichnisstruktur sieht folgendermaßen aus:

+ Folder I know
   + Auto Generated Folder         'Name changes every time
      -SomeFile
      -SomeFile2
      +macro
         -macro1
         -macro2
         -macro3

Ich möchte nur mit den Dateien im Unterverzeichnis „Makro“ arbeiten. Ich habe eine funktionierende Exportlösung mit dem Befehl „for“, die den „Ordner, den ich kenne“ durchsucht und eine Übereinstimmung durchführt:

 for /R "C:\Folder I know\" %f in ("macro*") do @xcopy "%f" "destination path" /u /y

Mit dem Schalter /u im Befehl xcopy kann ich sogar nur Dateien aktualisieren, die bereits im Ziel vorhanden sind. Nun stellt sich die Frage, wie ich dasselbe in umgekehrter Reihenfolge mache. Ich möchte Dateien aus einem Ordner (z. B. c:\temp) kopieren und sie im Makroordner nur aktualisieren, wenn sie bereits dort vorhanden sind.

Antwort1

Ich bin mir nicht ganz sicher, ob ich genau verstehe, was Sie versuchen, aber es scheint, dass die %CD%Umgebungsvariable nützlich sein könnte. Diese Variable verfolgt das aktuelle Arbeitsverzeichnis, einschließlich Laufwerksbuchstaben und vollständigem Pfad. Hier ist ein Screenshot davon in Aktion.

Bildbeschreibung hier eingeben

Wenn Sie diese Variable kennen, können Sie sie in Skripten so verwenden, wie Sie es für nützlich halten. In Ihrem speziellen Fall müssen Sie Ihr Skript bei jeder Generierung in den Makroordner kopieren und von dort aus ausführen.

Die einzige Möglichkeit, ein Skript zu schreiben, das extern funktioniert, besteht darin, Zugriff auf die Variable zu erhalten, die das Programm erstellt, um den einen Ordnernamen automatisch zu generieren. Wenn der automatisch generierte Ordnername einer Konvention folgt, die Sie mit einem Muster abgleichen können, gibt es wahrscheinlich einige Optionen mit IF-Anweisungen, RegExes und Zeichenfolgenbefehlen, die für Sie funktionieren könnten.

Antwort2

Nach einigem Nachdenken und Testen habe ich eine Lösung gefunden.

FOR /R "C:\Folder I know\" %f IN ("*") DO @xcopy "network path\%~nf" "%~pf" /e /u /y

Der for-Befehl betrachtet immer noch nur jede Datei in dem mir bekannten Ordner, einschließlich der mir unbekannten Unterverzeichnisse. Anschließend führt er eine Xcopy unter Verwendung des Netzwerkpfads aus, in dem die Dateien gesichert sind. Das %~nfam Ende angehängte ruft den Dateinamen der aktuellen Datei vom for-Befehl ab. Anschließend kopiert er sie unter Verwendung von in den lokalen Ordner, wodurch %~pfder Pfad der aktuellen Datei vom for-Befehl abgerufen wird.

verwandte Informationen