私はそれ%0
がバッチスクリプトの完全なパスを含んでいることを知っています、例えばc:\path\to\my\file\abc.bat
にpath
等しいだろうc:\path\to\my\file
どうすればそれを達成できますか?
私はそれ%0
がバッチスクリプトの完全なパスを含んでいることを知っています、例えばc:\path\to\my\file\abc.bat
にpath
等しいだろうc:\path\to\my\file
どうすればそれを達成できますか?
回答:
%~dp0
ディレクトリになります。ここにすべてのパス修飾子に関するドキュメントがあります。楽しいもの:-)
最後のバックスラッシュを削除するには:n,m
、次のように部分文字列構文を使用できます。
SET mypath=%~dp0
echo %mypath:~0,-1%
残念ながら、%0
構文と構文を組み合わせる方法はないと思います:~n,m
。
%~0\..
-より良い方法がなければならないことを知っていました!また、あなたはおそらく囲むことになるでしょう%~dp0
、二重引用符(に""
)場合になど、ディレクトリ名にスペースがあります
%~dp0
最後に「」が含まれています。あなたはそれを削除する方法を考えていますか?
SET msg=hello world
正常に動作します)。ただし、他の場所で%mypath%を使用する場合は、引用符でそれを使用するように注意する必要がありますが、cd
どちらにも必要ありません。
%~dp0
相対パスの場合があります。それをフルパスに変換するには、次のようなことを試してください:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0
直接使用しないのはなぜですか?
%~dp0
相対的である可能性があり、ユースケースに応じて問題となる場合と問題にならない場合があります
%~dp0
相対パスを含めることはできません。d
ドライブとパスを表します。ドライブをp
どのように相対パスにすることができますか?
%~dp0
ところ、スクリプトが相対パスとして実行された場合でも、絶対パスになります。jebのコメントのおかげで、私はこの答えにだまされませんでした。なぜ人々は単にものを作り、行き、彼らの野生の想像力を他の人に広げ始めますか?私にはこれを行う同僚がいますが、私は彼の(若い)年齢を非難しました。私の反対票が数えられることを望みます。
を使用できます%~dp0
。dはドライブのみを意味し、pはパスのみを意味し、0はバッチファイルの完全なファイル名の引数です。
たとえば、ファイルパスがC:\ Users \ Oliver \ Desktop \ example.batの場合、引数はC:\ Users \ Oliver \ Desktop \と等しくset cpath=%~dp0 && set cpath=%cpath:~0,-1%
なり、コマンドを使用して%cpath%
変数を使用して末尾のスラッシュを削除することもできます。
それが%CD%
変数になります。
@echo off
echo %CD%
%CD%
バッチスクリプトがある現在のディレクトリを返します。
CD C:\Temp <CR> ECHO %CD%
(<CR>
is newline ...)
私はWindows 7マシンで作業しており、bashスクリプトの絶対フォルダーパスを取得するために以下の行を使用することになりました。
http://www.linuxjournal.com/content/bash-parameter-expansionを見て、このソリューションにたどり着きました。
#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