Dies scheint ziemlich einfach zu sein und vielleicht übersehen ich nur das richtige Flag , aber wie würde ich in einem Befehl eine Datei von einem Verzeichnis in ein anderes kopieren und im Zielverzeichnis umbenennen? Hier ist mein Befehl:
if exist "bin\development\whee.config.example"
if not exist "TestConnectionExternal\bin\Debug\whee.config"
xcopy "bin\development\whee.config.example"
"TestConnectionExternal\bin\Debug\whee.config"
Es fordert mich jedes Mal auf, Folgendes zu tun:
Gibt TestConnectionExternal \ bin \ Debug \ whee.config einen Dateinamen oder Verzeichnisnamen auf dem Ziel an (F = Datei, D = Verzeichnis)?
Ich möchte diese Aufforderung unterdrücken. Die Antwort ist immer F
.
command-line
command-prompt
xcopy
Sarah Vessels
quelle
quelle
cp
Achten Sie darauf , dass Sie keine Dateien / Verzeichnisse kopieren müssen!Antworten:
Verwenden Sie nicht die
xcopy
, verwenden Siecopy
stattdessen, es hat dieses Problem nicht.xcopy
wird im Allgemeinen verwendet, wenn rekursive Kopien mehrerer Dateien / Ordner ausgeführt werden oder wenn Sie die darin enthaltenen Überprüfungs- / Eingabeaufforderungsfunktionen benötigen. Bei Einzeldateikopiencopy
funktioniert der Befehl einwandfrei.quelle
copy
kopiert die Datei nicht, wenn die gesamte Verzeichnisstruktur für das Ziel noch nicht vorhanden ist.xcopy
erstellt automatisch alle benötigten Verzeichnisse.xcopy
und nicht nurcopy
.ich benutze
um es zu umgehen.
quelle
echo d | xcopy srcdirectory destdirectory /S
echo d | xcopy ...
ich an einer deutschen Windows-Installation arbeite, ist es für mich. Sie sind brillantEine andere Option ist die Verwendung eines Ziel-Platzhalters. Beachten Sie, dass dies nur funktioniert, wenn die Quell- und Zieldateinamen identisch sind. Obwohl dies das spezifische Beispiel des OP nicht löst, dachte ich, dass es sich lohnt, es zu teilen.
Zum Beispiel:
erstellt eine Kopie der Datei "whee.config.example" im Zielverzeichnis, ohne zur Eingabe einer Datei oder eines Verzeichnisses aufzufordern.
Update : Wie von @chapluck erwähnt:
Sie können ändern ,
"* "
zu"[newFileName].*"
. Die Dateierweiterung bleibt bestehen, kann jedoch umbenannt werden. Oder mehr hacky:"[newFileName].[newExt]*"
Erweiterung ändernquelle
In XCOPY gibt es eine Art undokumentierte Funktion. Sie können verwenden:
xcopy "bin \ development \ whee.config.example" "c: \ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config *"
Ich habe es gerade heute getestet. :-)
quelle
whee.config.example
zum Zielordner, weilwhee.config*
übereinstimmtwhee.config.example
.b.txtxt
und dann den Befehl gestartet,xcopy a.txt b.txt* /F /Y
und die Dateia.txt
wurdeb.txt
wie erwartet kopiert . Darüber hinaus wird bei Verwendung der/F /Y
Schalter die tatsächliche Kopie genau wie erwartet auf dem Bildschirm angezeigt.Gehen Sie einfach zu http://technet.microsoft.com/en-us/library/bb491035.aspx
Das Hauptproblem lautet: "... Wenn das Ziel kein vorhandenes Verzeichnis enthält und nicht mit einem Backslash () endet , wird die folgende Meldung angezeigt: ...
Gibt das Ziel einen Dateinamen oder Verzeichnisnamen auf dem Ziel an (F = Datei, D = Verzeichnis)?
Sie können diese Nachricht unterdrücken, indem Sie die Befehlszeilenoption / i verwenden. Dadurch nimmt xcopy an, dass das Ziel ein Verzeichnis ist, wenn die Quelle mehr als eine Datei oder ein Verzeichnis ist.
Ich habe eine Weile gebraucht, aber alles was es braucht ist RTFM.
quelle
Es gibt also eine einfache Lösung dafür. Es ist zwar umständlich, aber es funktioniert. xcopy fordert Sie nicht auf, herauszufinden, ob das Ziel ein Verzeichnis oder eine Datei ist, wenn die neue Datei (Dateiname) bereits vorhanden ist. Wenn Sie Ihrem xcopy-Befehl ein einfaches Echo auf den neuen Dateinamen voranstellen, wird die leere Datei überschrieben. Beispiel
quelle
Dies ist aus Rechnungen Antwort.
Nur um anderen wirklich klar zu sein.
Wenn Sie EINE Datei von einem Ort an einen anderen kopieren UND die vollständige Verzeichnisstruktur erstellen möchten, verwenden Sie den folgenden Befehl:
Ja, setzen Sie einen Backslash am Ende des Dateinamens und Sie werden NICHT gefragt, ob es sich um eine Datei oder ein Verzeichnis handelt. Da die Quelle nur EINE Datei enthält, wird davon ausgegangen, dass es sich um eine Datei handelt.
quelle
dir "C:\Target Data\\Images\2013\08\12"
09/25/2015 10:48 AM <DIR> 85e4a707-2672-481b-92fb-67ecff20c96b.jpg
xcopy src dest /I
REM This assumes dest is a folder and will create it, if it doesnt exists
quelle
Ich hatte ein ähnliches Problem und sowohl Robocopy als auch xcopy halfen nicht, da ich die Kommentare unterdrücken und einen anderen Zieldateinamen verwenden wollte. ich fand
Arbeiten nach meinen Anforderungen.
quelle
Zurück zur ursprünglichen Frage:
könnte mit zwei Befehlen erfolgen, zB:
Durch einfaches Anhängen von "\ .." an den Pfad der Zieldatei wird das Zielverzeichnis erstellt, sofern es noch nicht vorhanden ist. In diesem Fall
Dies ist das übergeordnete Verzeichnis des nicht vorhandenen Verzeichnisses
Zumindest für WIN7 ist es mkdir egal, ob das Verzeichnis
existiert wirklich.
quelle
XCOPY mit * am Ende des Ziels, um Dateien zu kopieren, unabhängig davon, ob sie im Ziel vorhanden sind oder nicht. XCOPY mit \ am Ende des Ziels, um Ordner und Inhalte zu kopieren, die im Ziel vorhanden sind oder nicht
Alternative
RoboForm SOURCE DEST-DATEI für Dateien RoboForm SOURCE DEST für Ordner
quelle
Ich schlage
robocopy
stattcopy
oder vorxcopy
. Wird als Befehl oder in der GUI auf Clients oder Servern verwendet. Tolerant gegenüber Netzwerkpausen und Sie können festlegen, dass Dateiattribute beim Kopieren von Kopien nach Dateiattributen ignoriert werden. Oh, und es unterstützt Multi-Core-Maschinen, sodass Dateien viel schneller "parallel" miteinander anstatt nacheinander kopiert werden.robocopy
finden Sie im MS TechNet.quelle
Das Richtige, wenn Sie nur eine Datei kopieren und ihren Namen am Zielort ändern möchten, ist:
Und es wird gut funktionieren
quelle
Zum Duplizieren großer Dateien ist xopy mit / J-Schalter eine gute Wahl. In diesem Fall leiten Sie einfach ein F für die Datei oder ein D für das Verzeichnis weiter. Sie können Jobs auch in einem Array für zukünftige Referenzen speichern. Zum Beispiel:
Vielen Dank an Chand mit ein paar Änderungen: https://stackoverflow.com/users/3705330/chand
quelle
Verwenden Sie beim Kopieren von Dateien "Kopieren" anstelle von "Kopieren".
Beispiel: "bin \ development \ whee.config.example" "TestConnectionExternal \ bin \ Debug \ whee.config" kopieren
quelle
copy /Y source destination
, um die Überschreibbestätigung zu übergeben.Da Sie den Dateinamen nicht wirklich ändern, können Sie den Dateinamen aus dem Ziel entfernen, und es gibt keine Fragen.
Dieser Ansatz funktioniert gut, wenn das Zielverzeichnis garantiert vorhanden ist und wenn die Quelle ebenfalls eine Datei oder ein Verzeichnis sein kann.
quelle
Debug
Verzeichnis wahrscheinlich garantiert vorhanden.Umgehen, ReName verwenden ... und einen kryptischen Namen benennen, dann den richtigen Namen umbenennen
C:
CD "C: \ Benutzer \ Öffentlich \ Dokumente \ Meine Websites \ AngelFire ~ Zoe \"
XCopy / D / I / V / Y "C: \ Benutzer \ Öffentlich \ Dokumente \ Meine Websites \ HostGator ~ ZoeBeans \ cop.htm"
Ren "cop.htm" "christ-our-passover.htm"
quelle
Mit xcopy können Sie eine einzelne Datei in einen angegebenen Ordner kopieren, ohne dass Sie einen Zielnamen definieren können. Wenn Sie den Zielnamen benötigen, benennen Sie ihn einfach um, bevor Sie ihn kopieren.
ren "bin \ development \ whee.config.example" whee.config
xcopy / R / Y "bin \ development \ whee.config" "TestConnectionExternal \ bin \ Debug \"
quelle
ren "bin\development\whee.config" whee.config.example
Setzen Sie ein Sternchen (*) am Ende des Zielpfads, um den Streit zwischen D und F zu überspringen.
Beispiel:
quelle
Gibt xxxxxxxxxxxx einen Dateinamen oder Verzeichnisnamen auf dem Ziel an
quelle
Ich habe das gleiche Problem beim Versuch, eine Datei mit neuem Namen zu kopieren, nur dann festgestellt, wenn die Datei nicht im Ziel vorhanden oder vorhanden ist (mit neuem Namen), aber älter ist. Die Lösung besteht darin,
*
char am Ende des Zieldateinamens hinzuzufügen . Beispiel:quelle
Sie können nicht angeben, dass es sich immer um eine Datei handelt. Wenn Sie die anderen Funktionen von xcopy nicht benötigen, können Sie sie auch einfach normal verwenden
copy
.quelle
copy
, dass als interner Befehl ErrorLevel nicht festgelegt wird. Wenn Sie den Pfad einer Batchdatei beeinflussen möchten, wenn ein Kopierfehler auftritt, müssen Sie verwendenXCOPY
.