2017-09-22 9 views
0

Ich schreibe eine Batch-Datei, und ich möchte einige Dateien von Root-Pfad zu cd .. Root verschieben.Batch-Datei, um einen Schritt zurück zu gehen

Ich benutze% ~ dp0, um den Root-Pfad zu finden.

Was ist die beste Methode, um einen Schritt vom Root-Pfad zurückzugehen?

Vielen Dank

Antwort

0

Sie sind fast da, benutzen Sie einfach %~dp0..

oder wenn Sie es vollständig gelöst möchten, verwenden Sie diesen Trick

@echo off 
call :resolve "%~dp0.." 
goto :eof 

:resolve 
echo %~f1 
goto :eof 

für eine Erklärung, diese https://stackoverflow.com/a/15568171/30447 antworten sehen SO

1

%~dp0 verweist auf die paren t Verzeichnis der aktuellen Stapeldatei (einschließlich einer nachlaufenden \), %~dp0.. verweist daher auf das Großelternverzeichnis der Stapeldatei.

Sie können eine for loop und die ~f modifier seiner variablen Referenz (%%I) verwenden Sie den Pfad zu beheben:

for %%I in ("%~dp0..") do echo/%%~fI 
+0

Neben dem Tippfehler, Ihre Antwort lässt mich mit Fragen. Zeigt '% ~ dp0.' auf das übergeordnete Verzeichnis und'% ~ dp0 ... 'zeigt auf das Urgroßelternteil usw. Wenn'% ~ dp0' auf Laufwerksbuchstaben und -pfad erweitert wird, muss ich es verwenden der '~ f' Modifikator. Ist '"% ~ dp0 .. "' bei der Auswertung der Klammern nicht erweitert, so wird das vollständig expandierte Laufwerk und der Pfad als Variable '%% I' an einen String übergeben. Warum braucht es eine weitere Erweiterung mit '~ f'? – Compo

+0

@Compo, warum sollte '% ~ dp0..' automatisch aufgelöst werden? '% ~ dp0' expandiert einfach zum Laufwerk (' d') und Pfad ('p') zum übergeordneten Verzeichnis der aktuellen Batch-Datei mit dem abschließenden' \ ', egal ob Sie etwas wie' ..' vorhängen oder anhängen. Ein '.' zeigt auf das gleiche Verzeichnis (also' anydir \ middir \ subdir' ist dasselbe wie 'anydir \ middir \ subdir \ .'),' ..' zeigt auf das übergeordnete Verzeichnis (also 'anydir \ middir \ subdir \ .. 'ist das gleiche wie' anydir'); Es gibt kein '...' (Sie müssen 'anydir \ middir \ subdir \ .. \ ..' tun, um auf 'anydir' zu zeigen) ... – aschipfl

+0

@Compo, und was meinen Sie mit" Klammernbewertung " ? Du meinst, dass "for" den Part nach "in" automatisch auflöst? Nein, tut es nicht; Es löscht niemals Pfade wie 'anydir \ middir \ subdir \ .. \. \ .. \ file.ext', es löst nur Platzhalter (' * ','? ') auf, wenn diese im letzten Pfadelement erscheinen (also hinter dem letzten '\ '); Sie müssen den Modifizierer '~ f 'verwenden, damit der Pfad aufgelöst wird. Beachten Sie, dass 'for' nicht auf das Dateisystem zugreift, um zu überprüfen, ob der Pfad wirklich existiert, sofern keine Platzhalter enthalten sind ... – aschipfl

Verwandte Themen