Ich weiß, dass %0der vollständige Pfad des Batch-Skripts enthalten ist, zc:\path\to\my\file\abc.bat
Ich würde pathgleich seinc:\path\to\my\file
Wie könnte ich das erreichen?
Ich weiß, dass %0der vollständige Pfad des Batch-Skripts enthalten ist, zc:\path\to\my\file\abc.bat
Ich würde pathgleich seinc:\path\to\my\file
Wie könnte ich das erreichen?
Antworten:
%~dp0wird das Verzeichnis sein. Hier finden Sie eine Dokumentation zu allen Pfadmodifikatoren . Lustige Sachen :-)
Um den endgültigen Backslash zu entfernen, können Sie die :n,mTeilzeichenfolgensyntax wie folgt verwenden:
SET mypath=%~dp0
echo %mypath:~0,-1%
Ich glaube leider nicht, dass es eine Möglichkeit gibt, die %0Syntax mit der :~n,mSyntax zu kombinieren .
%~0\..- wusste, dass es einen besseren Weg geben musste! Außerdem sollten Sie wahrscheinlich %~dp0doppelte Anführungszeichen ( "") einfügen, falls der Verzeichnisname Leerzeichen enthält usw.
%~dp0enthält die `` am Ende. Haben Sie eine Idee, wie Sie es entfernen können?
SET msg=hello worldfunktioniert gut). Wenn Sie jedoch% mypath% an anderer Stelle verwenden, sollten Sie darauf achten, es in Anführungszeichen zu verwenden, obwohl sie auch nicht benötigt cdwerden.
Sie können das folgende Skript verwenden, um den Pfad abzurufen, ohne "\"
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
%~dp0kann ein relativer Pfad sein. Versuchen Sie Folgendes, um es in einen vollständigen Pfad umzuwandeln:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0direkt verwenden?
%~dp0kann relativ sein, was je nach Anwendungsfall ein Problem sein kann oder nicht
%~dp0kann keinen relativen Pfad enthalten, dsteht für Laufwerk und pfür Pfad, wie könnte ein Laufwerk relativ sein?
%~dp0, dass sie ein absoluter Pfad ist, selbst wenn das Skript als relativer Pfad ausgeführt wurde. Dank Jebs Kommentar ließ ich mich von dieser Antwort nicht täuschen. Warum erfinden die Leute einfach Sachen und verbreiten ihre wilde Fantasie an andere. Ich habe diesen Kollegen, der das tut, aber ich habe sein (junges) Alter beschuldigt. Ich wünschte, meine Ablehnung würde zählen.
Sie können verwenden %~dp0, d bedeutet nur das Laufwerk, p bedeutet nur den Pfad, 0 ist das Argument für den vollständigen Dateinamen der Batchdatei.
Wenn der Dateipfad beispielsweise C: \ Users \ Oliver \ Desktop \ example.bat lautet, entspricht das Argument C: \ Users \ Oliver \ Desktop \. Sie können auch den Befehl verwenden set cpath=%~dp0 && set cpath=%cpath:~0,-1%und die %cpath%Variable verwenden, um den abschließenden Schrägstrich zu entfernen.
%cd% gibt Ihnen den Pfad des Verzeichnisses an, in dem das Skript ausgeführt wird.
Renn einfach:
echo %cd%
%CD%ist der aktuelle Arbeitsordner, nicht der Ordner, in dem die Batchdatei gespeichert ist. Sie können am selben Ort sein, sind es aber oft nicht.
Das wäre die %CD%Variable.
@echo off
echo %CD%
%CD% Gibt das aktuelle Verzeichnis zurück, in dem sich das Batch-Skript befindet.
CD C:\Temp <CR> ECHO %CD%( <CR>ist Newline ...)
Ich arbeite auf einem Windows 7-Computer und habe am Ende die folgenden Zeilen verwendet, um den absoluten Ordnerpfad für mein Bash-Skript abzurufen.
Ich bin zu dieser Lösung gekommen, nachdem ich mir http://www.linuxjournal.com/content/bash-parameter-expansion angesehen habe .
#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder