Windows: Kopieren Sie die Dateien und ändern Sie die Erweiterung ohne Duplikate

518
User528491

Ich habe ein Verzeichnis mit Bilddateien ohne Erweiterung. Sagen wir, dass es sein soll D:\initial\. Jetzt möchte ich diese Dateien in das D:\final\Verzeichnis kopieren und die Erweiterung .jpgfür jede Datei ändern .

Meine Lösung mit ROBOCOPY:

@echo off  SET srcDir=D:\initial\ SET destDir=D:\final\  echo Copying files from %srcDir% ROBOCOPY %srcDir% %destDir% /s /min:102400 echo Copying done  cd %destDir%  echo Renaming to JPG ren *. *.jpg 

Es gibt jedoch bestimmte Bedingungen:

  1. Kopieren Sie nur die Dateien, die größer als 100 KB sind.
  2. Löschen Sie keine Dateien im Quellverzeichnis.
  3. Das Quellverzeichnis erhält zu bestimmten Zeiten neuere Dateien. Kopieren Sie sie in das Zielverzeichnis (manuell, hier ist keine Automatisierung erforderlich)

Meine Lösung erfüllt die ersten beiden Bedingungen. Wenn ich jedoch nach dem Eintreffen neuer Dateien erneut laufe, werden auch die älteren kopiert, was zu Fehlern beim Umbenennen führt.

0
Verwenden Sie die `/ MAXAGE: n`-Option? DavidPostill vor 5 Jahren 0
Ihr dritter Punkt besagt, dass Sie dies manuell tun werden. Wo liegt das Problem? Seth vor 5 Jahren 1
@Seth Ich meinte, das Skript sollte nicht zeitlich ausgeführt werden; das kann manuell gemacht werden. Es muss jedoch Duplikate berücksichtigen. User528491 vor 5 Jahren 0
Benennen Sie Dateien im Quellverzeichnis um und führen Sie Robocopy wie gewohnt aus. Robocopy sollte vorhandene Dateien optimieren und überspringen. Seth vor 5 Jahren 0

1 Antwort auf die Frage

2
LotPings

Überprüfen Sie die Dateigröße und ob die Zieldatei mit einer Iteration für die Quelldateien existiert.

Und verwenden Sie x copy anstelle von robocopy jedes Mal, was hier übertrieben wäre.

Durch das Kopieren auf den neuen Namen mit der Erweiterung in einem Schritt müssen Sie nicht umbenennen.

@echo off  SET "srcDir=D:\initial" SET "destDir=D:\final"  echo Copying files from %srcDir% For %%A in ("%srcDir%\*.") do ( if %%~zA gtr 102400 if not exist "%destDir%\%%~nA.jpg" copy "%%~fA" "%destDir%\%%~nA.jpg" >NUL ) echo Copying done 
Versucht, "D: \ final \ D: \ initial \ file.jpg" mit dem Fehler zu kopieren. "Gibt ... einen Dateinamen oder einen Verzeichnisnamen auf dem Ziel an?" User528491 vor 5 Jahren 0
Bitte vergessen Sie nicht, den Modifizierer `~ n 'einzufügen, der nur den Namen aus der Quelldatei ohne Laufwerk und Pfad verwendet. LotPings vor 5 Jahren 1
Funktioniert gut, aber jetzt werden Sie jedes Mal gefragt, ob das Ziel eine Datei oder ein Verzeichnis ist. Wenn ich erneut laufe, werden Sie gefragt, ob ich alle Dateien überschreiben möchte (was nein ist). User528491 vor 5 Jahren 0
Es ist nicht mein Tag, der Modifikator fehlte auch beim Check. Bitte versuche es erneut. LotPings vor 5 Jahren 1
Ah ja! Es kann manchmal irritierend werden; Vielen Dank :) Das Überschreiben bestätigt, ist weg; obwohl es immer noch jedes Mal gefragt wird, ob das Ziel eine Datei oder ein Verzeichnis ist? Gibt D: \ final \ file.jpg einen Dateinamen oder einen Verzeichnisnamen auf dem Ziel an? ` User528491 vor 5 Jahren 0
Nehmen wir eine Kopie ohne x und wir sollten gut sein. Um die Meldung `1 kopierte Datei (en)` zu unterdrücken, hängen Sie `> NUL` an die Kopie an LotPings vor 5 Jahren 1
Perfekt! Ich habe mir den Befehl zum Kopieren nicht angesehen User528491 vor 5 Jahren 0