XCOPY noch Fragen, (F = file, D = directory) Bestätigung
Mein batch-Skript xcopy
noch Fragen F = file, D = directory
Bestätigung, obwohl ich Sie Hinzugefügt haben /F
im Skript, das Protokoll wird zeigen, wie unten.
Bitte helfen Sie, wie Sie zu vermeiden, in dem Sie gefragt.
Skript:
net use p: /delete
net use p: "\\200clan\F_Drive" /USER:adm /PERSISTENT:NO-1111
set source=%1
set target=p:/%2
echo %source% %target%
xcopy /S /I /Q /Y /F "%source%" "%target%"
Log:
C:\test\foldera>xcopy /S /I /Q /Y /F "C:/test/folder1/folder2/logs/154/compareReport_177.html" "p:/Services/WSDLCompare/177_20151116/compareReport_177.html" Does P:\Services\WSDLCompare\177_20151116\UIReport_177.html specify a file name or directory name on the target (F = file, D = directory)?
- In Fall, dass Sie nicht die Mühe zu gehen durch alle details und Möglichkeiten von
xcopy
fügen Sie ein back-slash am Ende Ihr Ziel-Pfad%target\%
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
/I
- Schalter (nicht/F
wie Sie in Ihrer Frage erwähnt) verhindertxcopy
sich die Frage, ob das Ziel eine Datei oder ein Verzeichnis nur dann, wenn mehrere Quelldateien angegeben werden, so dass, wenn die Quelle ein Verzeichnis ist, oder wenn Platzhalter?
oder*
verwendet werden. Wenn das Ziel bereits vorhanden ist, eine solche Aufforderung hat nie erscheinen.Gibt es folgende Szenarien (abhängig von den bereitgestellten Werten von
%source%
und%target%
):einer einzigen Quelldatei, Ziel ist eine Datei:
den
/I
- Schalter ist nutzlos, so müssen Sie die pipe -F
in diexcopy
Befehlszeile:vorausgesetzt, dass die
/Y
Schalter angegeben (Kraft überschreiben), könnte man auch erstellen der Ziel-Datei vorher (leere Datei):einer einzigen Quelldatei, das Ziel ist ein Verzeichnis:
den
/I
- Schalter ist nutzlos; Sie können RohrD
in diexcopy
Befehlszeile:oder Sie können einfach fügen Sie ein
\
zum Ziel:obwohl dies verursacht Probleme, wenn
%target%
gibt das aktuelle Verzeichnis eines Laufwerks wieD:
zum Beispiel, weilD:
bedeutet das aktuelle Verzeichnis dieses Laufwerks in der Erwägung, dassD:\
bedeutet das root-Verzeichnis der it;oder erstellen Sie den Ziel-directory im Voraus:
den
2> nul
Teil unterdrückt die Fehlermeldung falls das Verzeichnis bereits vorhanden ist;mehrere Quell-Dateien, Ziel ist eine Datei:
dies ist in der Regel eine sinnlose situation, weil Sie sagen
xcopy
zum kopieren von einzelnen Quell-Datei Ziel-Datei, also dem Versuch, diese zu überschreiben;mehrere Quell-Dateien, Ziel ist ein Verzeichnis:
den
/I
wechseln macht hier Sinn:dem pipe-option funktioniert auch hier:
so funktioniert das Anhängen eines
\
zum Ziel (hinsichtlich der Einschränkung wie oben erwähnt):oder erstellen Sie den Ziel-directory im Voraus:
Fazit
Den meisten flexible und sichere Lösung ist das Rohr die gewünschte Auswahl (
F
oderD
) in derxcopy
Befehlszeile. (Hinweis: die Abfrage ist locale-abhängig.)Ergänzen
Gibt es einige kleinere Probleme in Ihrem code-fragment möchte ich hier erwähnen:
\
als Pfad-Trennzeichen wie dieser ist der Windows-standard-Zeichen, die für diesen Zweck (obwohl/
funktioniert auch in den meisten Fällen);-1111
an Ihren zweitennet use
Befehlszeile; wenn dies das Passwort für die Ressource, sollte es verschoben werden, bevor die/USER
option; ansonsten entfernen Sie es einfach;set
Befehl-Linien einführen, die Probleme mit einigen Sonderzeichen (wie&
,^
,(
,)
); um dies zu vermeiden, stateset "source=%~1"
undset "target=p:/%~2"
; die~
entfernt Potenzial umliegenden""
von Argumenten (erforderlich sind, wenn Sie RAUM,,
,;
,=
);Hier ist der code, mit dem alle der oben genannten Dinge überarbeitet:
F
für Datei undD
für Verzeichnis sind nur die richtigen Zeichen auf der englischen Windows. Zum Beispiel auf einem deutschen WindowsD
ist für eine Datei (Deutsch: Datei) undV
ist für Sie ein Verzeichnis (Deutsch: Verzeichnis). Wenn ein OS-Sprachen-unabhängige Lösung benötigt für das kopieren einer einzelnen Datei mitxcopy
die nicht kopiert werden können mitcopy
auf batch-code auf diese Antwort auf die BATCH-Datei, fordert für die Datei oder den Ordner.Setzen Sie ein * hinter der Ziel-Datei. Dies unterdrückt die Frage und wird standardmäßig auf die Datei.
standardmäßig Ordner.
xcopy
kennt es nicht, das Ziel ist ein Verzeichnis. Sie klären, indem Sie einen umgekehrten Schrägstrich am Ende:source
ist ein in single file und dietarget
ist ein Verzeichnis, wie in meinem Fall, zusätzlich den umgekehrten Schrägstrich, um das Ziel und die Verwendung der/i
Schalter aus der Datei - /Verzeichnis-Frage Weg zu gehen und das Verzeichnis war dann richtig vermutet.Beim kopieren einer einzelnen Datei mit XCOPY, es gibt keine option, um anzugeben, ob das Ziel ein Dateiname oder ein Verzeichnis (mit dem Namen säumigen zu, dass der Quell-Datei).
In solchen Fällen XCOPY wird prompt mit eine (locale-spezifische) mit der Meldung:
C:> xcopy foo.txt bar.txt
fordert er
Hat foo.txt geben Sie einen Dateinamen oder ein Verzeichnis Namen auf dem Ziel (F = Datei, D = Verzeichnis)?
Hinzufügen einen Platzhalter (*) an das Ende des Ziels ist diese Meldung unterdrücken und Standard zu kopieren, als Datei:
C:> xcopy foo.txt bar.txt*
1 Datei(en) kopiert
Dies erfordert die Quell-und Ziel-Datei-Erweiterungen auf die gleiche Länge, in der Regel 3 Zeichen.
weitere Informationen: https://ss64.com/nt/xcopy.html
Entfernen der Ziel-Dateinamen unterdrückt die Meldung. Dies funktioniert für mich!
Benutze ich:
Es funktioniert.
Versuchen: