あなたがあなたのドライブとパスを取得するには、環境変数%~dp0
を使用することができるはずです現在実行中のバッチファイル。そこから、その文字列の終わりを文字で取り除き、新しい文字列を作成するのは非常に効率的ではない方法です。例えば
、バッチファイル:
Current directory is: C:\data\src\branch1\
New directory is: c:\build\bin\branch1
それがどのように動作するかについては、あなたは環境変数の部分文字列を行うため!xyz:~n,m!
を使用することができます。
@setlocal enableextensions enabledelayedexpansion
@echo off
set olddir=%~dp0
echo Current directory is: !olddir!
if "!olddir:~-1!" == "\" (
set olddir=!olddir:~0,-1!
)
set lastbit=
:loop
if not "!olddir:~-1!" == "\" (
set lastbit=!olddir:~-1!!lastbit!
set olddir=!olddir:~0,-1!
goto :loop
)
set newdir=c:\build\bin\!lastbit!
echo New directory is: !newdir!
endlocal
c:\data\src\branch1\qq.cmd
として実行されているが、以下の返し、負の値のm
またはn
は、最初からではなく最後からの意味です。だから最初のif
ブロックはそこにあれば末尾にある\
を取り除きます。
ループは似ていますが、パスの末尾から新しい変数に文字を転送します(\
が見つかるまで)。だからあなたはその道を最後にしています。それをあなたの固定された新しい道に追加するのは簡単なことです。
ニース、ちょうどこのを見て、%〜ディ%〜パイを持つ%0にするために使用していた:P – Leigh
おかげで、しかし、それは簡単な部分でした。難しい部分はそこから最後の\と部分文字列を見つけることです:/ –
申し訳ありません、@Viktor、私はもう少し質問を読んでいたはずです。 – paxdiablo