2012-04-05 8 views
1

Ich habe zwei Batchdatei auf das C:\ Laufwerk und ist mit %~dp0 Befehl den Pfad des ersten Skript verwenden, um eine Kopie die zweite Batch-Skript zu machen:Ändern Verzeichnis stoppt% ~ dp0 von der Arbeit

COPY %~dp0"Hello World.BAT" C:\"Hello World.bak" 

Früh im Skript muss ich in ein Unterverzeichnis von der Wurzel der C:\ wechseln, aber dies stoppt den oben genannten Kopierbefehl von der Arbeit mit dem Fehler Ich bekomme ist "die Datei kann nicht gefunden werden". Wenn ich in der Wurzel von C:\ bleibe, funktioniert der Kopierbefehl perfekt. Irgendwelche Ideen, warum das passiert.

Antwort

5

Eine andere Möglichkeit, dies zu lösen, wäre das Speichern von% ~ dp0 in einer anderen Variablen am Anfang des Skripts.

@echo off 
setlocal 
set filepath=%~dp0 
. 
. 
some code 
. 
. 
cd away from original path 
. 
. 
COPY "%filepath%Hello World.BAT" "C:\Hello World.bak" 

Das sollte Arbeit.

Ich bin versucht zu denken, der Grund, warum es nicht funktioniert, hat mit Ihren Zitaten zu tun.

Sie haben dies:

COPY %~dp0"Hello World.BAT" C:\"Hello World.bak" 

ersetzen Sie es mit diesem:

COPY "%~dp0Hello World.BAT" "C:\Hello World.bak" 

Sie müssen den gesamten Pfad in Anführungszeichen ein sicherzustellen, dass es funktionieren wird. Wenn Sie:

C:\Program Files\Somefolder\ 

als Ihren Weg und die Anführungszeichen verwenden, wie Sie sie es haben wird wie folgt ausfallen:

"C:\Program Files\Somefolder\""Hello World.bak" 

und es wird nicht funktionieren.

+0

Aber es sollte nicht notwendig sein.'% ~ Dp0' sollte unabhängig von der aktuellen zu irgendeinem Zeitpunkt in der Batch-Datei funktionieren Verzeichnis, oder irgendeinen anderen Faktor – dbenham

+0

Oh, Entschuldigung ... Ich lese gerade den letzten Teil ... du suchst warum das passiert, nicht wie du es umgehen kannst? siehe meine Bearbeitung unter der ursprünglichen Antwort – iesou

+0

Du bist wo ich war ursprünglich - siehe meine Antwort. Aber der Code sollte entweder funktionieren oder nicht funktionieren, unabhängig vom aktuellen Verzeichnis. – dbenham

2

Ich habe nicht genau herausgefunden, wie das Ändern des aktuellen Verzeichnisses dazu führt, dass der Befehl fehlschlägt, wenn er vor der Änderung funktioniert. Aber ich merke, dass die Zitate nicht optimal platziert sind. Leerzeichen im Pfad würden dazu führen, dass der Befehl fehlschlägt, obwohl es mir scheint, dass es unabhängig von Ihrem aktuellen Verzeichnis fehlschlagen sollte.

würde ich verwenden:

COPY "%~dp0Hello World.BAT" "C:\Hello World.bak" 

das Zitat auf die Vorderseite des ersten Arguments zu verschieben ist potenziell wichtig. Für das zweite Argument ist es nicht wichtig, da es offensichtlich keine Leerzeichen im Pfad gibt, aber es sieht besser für mich aus.

bearbeiten
Nach Ihrer Frage genauer zu lesen, ich denke da an die Geschichte mehr sein muss. Wenn sich beide Batch-Dateien im Stammverzeichnis des Laufwerks C befinden, sollte Ihr ursprünglich veröffentlichter Code funktionieren.

Versuchen Sie, Ihr Skript zu bearbeiten, um zu diagnostizieren, was passiert. Setzen Sie ECHO vor den Kopierbefehl, damit Sie sehen können, was das Skript versucht. (Oder einfach stellen Sie sicher, Echo, aber dann kann es schwieriger sein, die richtige Zeile in der Ausgabe zu finden.)

echo COPY %~dp0"Hello World.BAT" C:\"Hello World.bak" 

Wenn Sie immer noch nicht herausfinden, was falsch ist, die Ergebnisse veröffentlichen, damit andere vielleicht Hilfe.

+0

+1 auf die Verwendung von Echo zu Debug-Batch-Skripts –

+0

Ich kann mich erinnern, dass ich das gleiche Problem mit '% ~ dp0 bekam den falschen Weg zu bekommen. Aber leider kann ich es nicht reproduzieren noch daran erinnern wo ich es benutzt habe, es könnte ein neuer Effekt von Win7 vs. XP sein – jeb

+0

@jeb - ich erinnere mich an einen Bug mit kurzen Pfadnamen (auf XP?), Der mit dem falschen Pfad dazu führen könnte etwas wie '% ~ sdp0'. Bitte sagen Sie mir, es gibt keinen neuen Fehler mit '% ~ dp0' - das wäre schrecklich :-( – dbenham

Verwandte Themen