Stapelkopie gibt Fehler, xcopy funktioniert einwandfrei

1

Ich schreibe ein allgemeines Dateisicherungsprogramm. Es durchsucht das Laufwerk nach Dateien, die einer Reihe von Typen entsprechen, und schreibt sie dann in einen Ordner auf dem Desktop. Ich habe es unter xcopyWindows XP geschrieben, aber als ich erfuhr, dass xcopyes zugunsten von robocopyVista und neueren Betriebssystemen veraltet war , entschied ich mich, auf das nicht veraltete Betriebssystem zu wechseln, um die Kompatibilität aufrechtzuerhalten copy.

Hier fangen die Probleme an. Ich versuche, die Kopierroutine zu reparieren. Ich dachte, ich hätte alles geklärt, aber es kopiert nichts. Meine Ausgabe besteht aus null Dateien, die bei jeder Iteration kopiert werden.

Ursprünglicher Code mit xcopy:

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   echo f | xcopy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /q /y /g /c
)

Überarbeiteter (fehlerhafter) Code mit copy:

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   copy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /d /y /z
)

Ausgabe:

The system cannot find the path specified.
    0 files copied.

Ich weiß, dass es so aussieht, als ob jeder eins benutzt xcopyoder robocopyaber kann jemand helfen copy?

Hinweis: Ich verwende Batch, um es sehr übersichtlich und über die Befehlszeile zugänglich zu halten.

ndm13
quelle
Sie könnten das Problem finden, wenn Sie das Wort "Echo" vor dem Wort "Kopieren" einfügen. Und es könnte die Sache klarer machen, wenn Sie hier @forund hier ein @ setzen do @( , das alle Befehle auflistet, und Sie können sehen, was auch immer ein Fehler ist. Mir ist auch aufgefallen, dass in Ihrem Kopierbefehl doppelte Anführungszeichen fehlen. Sie hatten sie in Ihrem xcopy-Befehl
Barlop
nur ein vorschlag, denke, es würde mit "forfiles" etwas einfacher gehen. Beispiel: forfiles / pc: \ / s / m * .bmp / ​​c "cmd / c copy @datei"% HOMEDRIVE %% HOMEPATH% \ Desktop \ LDR \ Images \ Bitmap \ %% ~ nxa "Weitere Informationen hier -> ss64.com/nt/forfiles.html
9.
@barlop Sorry, das war eine Revision, die ich gepostet habe. Das, von dem ich dachte, dass es völlig korrekt ist, ist jetzt auf. Ich habe meinen Fehler entdeckt, nachdem ich ihn gepostet habe.
ndm13
1
D:\>(copy "D:\Program Files\Winamp\Plugins\avs\whacko6-07.bmp" "C:\Documents and Settings\,,,,\Desktop\LDR\Images\Bitmap\whacko6-07.bmp" /d /y /z ) The system cannot find the path specified. 0 file(s) copied.Eine Probe auf einer Probefahrt D. Die Ergebnisse waren alle gleich.
ndm13
1
Lösung gefunden. Ich werde die Antwort posten, wenn StackExchange es mir erlaubt. Für den Datensatz werden copykeine Dateipfade erstellt, sodass das Kopieren in einen Pfad, xcopyder für mich erstellt worden wäre, fehlgeschlagen ist . Ich muss meine Verzeichnisse vorab erstellen, denke ich.
ndm13

Antworten:

0

Lösung endlich gefunden!

Erstellt anscheinend xcopyVerzeichnisse, wenn sie nicht angegeben sind. Ich hatte den \LDR\Images\BitmapDateipfad noch nicht angelegt. copyweiß nicht, wie man Ordner erstellt, deshalb muss ich sie vorher generieren, was ein wenig ärgerlich ist, weil xcopydamit keine Ordner erstellt würden, wenn keine Dateien darin abgelegt werden müssten. Wenn copyich Ordner erstelle, gehen wir davon aus, dass sie gefüllt sind.

Danke für die Hilfe. FOR THE RECORD: Erstellt copykeine nicht vorhandenen Dateipfade. xcopytut!

UPDATE: Meine endgültige Lösung. Läuft wie ein Champion.

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   if not exist "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\" (md "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\")
   copy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /d /y /z
)
ndm13
quelle