Ich weiß, dass %0
der vollständige Pfad des Batch-Skripts enthalten ist, zc:\path\to\my\file\abc.bat
Ich würde path
gleich seinc:\path\to\my\file
Wie könnte ich das erreichen?
Ich weiß, dass %0
der vollständige Pfad des Batch-Skripts enthalten ist, zc:\path\to\my\file\abc.bat
Ich würde path
gleich seinc:\path\to\my\file
Wie könnte ich das erreichen?
Antworten:
%~dp0
wird 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,m
Teilzeichenfolgensyntax wie folgt verwenden:
SET mypath=%~dp0
echo %mypath:~0,-1%
Ich glaube leider nicht, dass es eine Möglichkeit gibt, die %0
Syntax mit der :~n,m
Syntax zu kombinieren .
%~0\..
- wusste, dass es einen besseren Weg geben musste! Außerdem sollten Sie wahrscheinlich %~dp0
doppelte Anführungszeichen ( ""
) einfügen, falls der Verzeichnisname Leerzeichen enthält usw.
%~dp0
enthält die `` am Ende. Haben Sie eine Idee, wie Sie es entfernen können?
SET msg=hello world
funktioniert 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 cd
werden.
Sie können das folgende Skript verwenden, um den Pfad abzurufen, ohne "\"
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
%~dp0
kann ein relativer Pfad sein. Versuchen Sie Folgendes, um es in einen vollständigen Pfad umzuwandeln:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0
direkt verwenden?
%~dp0
kann relativ sein, was je nach Anwendungsfall ein Problem sein kann oder nicht
%~dp0
kann keinen relativen Pfad enthalten, d
steht für Laufwerk und p
fü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