xcopy Datei / Verzeichnis-Abfrage nicht unterdrücken

11793
Daniel Bingham

Ich versuche, xcopy zu verwenden, um eine Datei von einem Computer auf einen anderen in unserem Netzwerk als Teil eines Java-Programms zu kopieren. Ich rufe xcopy so an:

xcopy "C:\Program Files\path\to\my\file" "\\othermachine\c$\Documents and Settings\<myUserName>\Desktop\Test\path\in\directory\structure\to\file" /e /y /i 

Da ich es mit in Java aufrufe, muss ich alle Aufforderungen unterdrücken. In den meisten Fällen haben \ i und \ y genau das getan. Jedoch schlägt für diese eine Datei / ich fehl und ich erhalte die Datei- oder Verzeichnisaufforderung. Das Ergebnis ist, dass das gesamte Programm hängen bleibt.

Ich habe auch versucht, es mit / s / t / q an die vorhandenen Optionen anzuhängen, ohne Erfolg. Warum kann ich die Eingabeaufforderung "Datei" oder "Verzeichnis" nicht unterdrücken? Gibt es eine Reihenfolge, in der ich die Optionen aufrufen muss? Gibt es noch etwas, was ich tun muss?

EDIT: Ich sollte erwähnen, dass die Datei eine Textdatei ist - einzeilig. Es hat keine Erweiterung. Es sieht so aus: FILE-NAME

2

5 Antworten auf die Frage

7
Marc Wittke

echo F macht den Trick:

echo F | xcopy "C:\Program Files\path\to\my\file" "\\othermachine\c$\Documents and Settings\<myUserName>\Desktop\Test\path\in\directory\structure\to\file" /e /y /i 

Beachten Sie, dass sich das Zeichen in lokalisierten Versionen unterscheiden kann (Mein Deutsch erwartet D für Datei (Datei) oder V für Verzeichnis (Verzeichnis)).

keine Lokalisierung, es ist immer noch der gleiche Buchstabe in Win 8 rus. Es ist jedoch ärgerlich. Ich würde es vorziehen, wenn xcopy die `/ -i`-Option verwendet, um diese dumme Frage zu unterdrücken. Arioch 'The vor 5 Jahren 0
6
Govert

Ein scheinbar undokumentierter Trick besteht darin, *am Ende des Ziels ein a zu setzen - dann wird xcopy als Datei kopiert, also

xcopy c:\source\file.txt c:\destination\newfile.txt*

Der echo f | xcopy ...Trick funktioniert nicht bei lokalisierten Versionen von Windows, bei denen die Eingabeaufforderung unterschiedlich ist.

"echo f" funktioniert zumindest bei Russian Win 8.1 // PS. Der Stern-Trick funktioniert, ich kann mich nur fragen, wer es je entdecken könnte! Ich wette, es ist ein Fehler in xcopy, der verwendet wird, um das Fehlen eines benötigten Features zu kompensieren Arioch 'The vor 5 Jahren 0
1
Milde

Dieser Thread auf Stackoverflow hat keine markierte Antwort, kann aber hilfreich sein (scheint die gleiche Frage zu sein).

Danke für den Vorschlag, aber das ist ein etwas anderes Szenario. Dadurch wird das Terminal selbst beim Aufruf einer Batchdatei unterdrückt. Ich versuche, eine Aufforderung zu unterdrücken, die xcopy gibt. Daniel Bingham vor 14 Jahren 0
0
Col

Ich habe immer einen nützlichen Cheat für diese Situationen gefunden, um eine Textdatei mit einem Y darin zu haben und am Ende von xcopy das Tag <y.txt zu markieren

0
Arioch 'The

Ein weiterer möglicher Trick ist die Vorerstellung einer Zieldatei oder eines Zielordners. Dann xcopywürde ich nicht fragen, weil es schon wüsste. Ich würde nicht sagen, dass diese Lösung besser ist als die oben genannten, sie ist einfach anders und daher möchte ich, dass sie auch hier ist.

Meine einfache Aufgabe bestand darin, eine Reihe von Dateien aus einem Netzwerkordner in einen lokalen Ordner zu kopieren.

  • AAAAA \ Disk1.zip => AAAAA.zip
  • BBBBB \ Disk1.zip => BBBBB.zip
  • und so weiter

Ursprünglicher Befehl (eine Zeile einer etwas längeren .cmd-Skriptdatei) war

for /d /r %SRC% %%1 in (*.*) do xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip 

Dies führt jedoch zu vielen dieser (F) ile- oder (D) -Rectory- Fragen bei der ersten Verwendung mit neuen (noch nicht zuvor getroffenen) Dateien. Vor allem, wenn ich einen neuen leeren Zielordner fülle.

Dann die echo Fund Asterisk Hack Antworten - sie funktionieren auch gut.

  • for /d /r %SRC% %%1 in (*.*) do echo f | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip
  • for /d /r %SRC% %%1 in (*.*) do xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip*

Nun wäre eine weitere mögliche Lösung explizit das ERSTELLEN des Zielordners der Datei, bevor der xcopyBefehl ausgegeben wird .

Für eine Datei wäre es zum Beispiel:

echo. > C:\Temp\TargetPlace xcopy Source C:\Temp\TargetPlace 

Leider verfügt Windows standardmäßig nicht über einen touchBefehl. Dies ist sehr nützlich, um eine 0-Byte-Dummy-Datei zu erstellen.

Für Ordner wäre es zum Beispiel:

mkdir C:\Temp\TargetPlace xcopy Source C:\Temp\TargetPlace 

Zugegeben, es benötigt zwei Befehle - zwei Zeilen - im CMD-Shell-Skript. Sie können nicht mehrere Befehle in CMD für Schleife setzen leicht, aber hier können Sie Rohr der Befehle zusammen (das Bereitstellen xcopywürden tatsächlich jede Benutzereingabe lesen, wenn den spezifischen Befehl ausgegeben, die in Zukunft Windows - Versionen zum Beispiel ändern könnten, wenn auch unwahrscheinlich).

Für Ordner:

for /d /r %SRC% %%1 in (*.*) do md %~dp0%%~nx1.zip | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip 

Für Dateien:

for /d /r %SRC% %%1 in (*.*) do echo. >%~dp0%%~nx1.zip | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip 

Dieser letzte Befehl hat ZWEI Umleitungen für die Ausgabe zwischen - echo.> ... | xcopy. Aber zumindest in .cmdDateien von Windows 8.1 funktioniert es.