Kopieren von Dateien von einem Pfad mit %~dp0% funktioniert nicht
Beachten Sie, dass ich bin falsch in der Annahme, dass ich verwenden soll %~dp0%
um den Pfad ohne den Dateinamen der batch-Datei, die Sie von innen. Ich bin verlassen, die Frage ist, wie ich gesehen habe, die anderen mit der gleichen fehlerhaften Prämisse. Finden Sie die akzeptierte Antwort, und seinen Kommentar, für weitere Informationen.
Als viel mehr von den fortgeschrittenen Windows-Nutzer kennen den Ausdruck %~dp0%
in einer batch-Datei ausgewertet werden, um die batch-Datei im Verzeichnis einschließlich den nachgestellten umgekehrten Schrägstrich.
Wenn ich eine batch-Datei in D:\
mit echo %~dp0%
die Zeile verhält sich wie erwartet und Ausgang D:\
.
Das problem
Ist, wenn ich eine Datei D:\FILETOCOPY.txt
und eine batch-Datei D:\problem.bat
mit folgendem Inhalt:
@ECHO OFF
copy D:\FILETOCOPY.txt %userprofile%\FILECOPIEDA.txt
copy %~dp0%FILETOCOPY.txt %userprofile%\FILECOPIEDB.txt
set Evaluated=%~dp0%FILETOCOPY.txt
copy %Evaluated% %userprofile%\FILECOPIEDC.txt
cmd.exe
Bekomme ich diese Ausgabe, wenn ich es ausführen (durch Doppelklick) auf:
1 file(s) copied.
The system cannot find the path specified.
1 file(s) copied.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
D:\>
Und die Datei %userprofile%\FILECOPIEDB.txt
fehlt das Ziel. Es funktioniert, wie bewiesen durch FILECOPIEDC.txt
wenn ich bewerten die %~dp0%
auf einer separaten Zeile. Es scheint, dass es vermasselt dem kopieren der Datei irgendwie, aber es funktioniert, wie erwartet, in die Mitte eine echo-Zeile.
Genau was ist hier Los?
- Ändern Sie die drei Aufrufe
copy
zuecho
statt, und führen Sie die batch-Datei. Schauen Sie genau auf die Ausgabe, besonders der zweiteecho
. Siehst du zwei getrennte Aussagen (wie die erste und die Dritte)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
%~dp0
nicht%~dp0%
.Ihren Befehl übersetzt (Klammern und Unterstriche eingefügt für die übersichtlichkeit)
und da die variable
%FILETOCOPY.txt %
nicht existiert, wird es durch einen leeren string ersetzt.%~dp0%
nicht da sein sollte. Aber könnten Sie bitte fügen Sie eine Zeile, die erklärt, warum die zweite%
falsch ist? Ich hatte den Eindruck, dass Variablen in batch-Dateien waren immer umgeben von%
-Zeichen.Zwei
\\
nacheinander werden behandelt, als eine einzelne\
im Windows. Es ist nicht ein problem.Wenn Ihr %userprofile% enthält Leerzeichen oder
&
dann um den gesamten Begriff in Anführungszeichen gesetzt werden.Anderen Stelle erwähnt wurde - der Begriff sollte
%~dp0