2011-02-09 17 views
3

これは非常に具体的な質問です。バッチファイルの文字列操作

は私がバッチファイルでc:\build\bin\branch_1に私の環境変数%buildpath%を設定するにはどうすればよいのディレクトリにある\ c:\data\src\branch_1

から実行するバッチファイルを持っていると言いますか?

(同じバッチファイルはc:\foo\bar\branch_2に配置されている場合、余分な明確にするためには、私はそれがc:\build\bin\branch_2%buildpath%を設定したい)

答えて

6

あなたがあなたのドライブとパスを取得するには、環境変数%~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

ニース、ちょうどこのを見て、%〜ディ%〜パイを持つ%0にするために使用していた:P – Leigh

+0

おかげで、しかし、それは簡単な部分でした。難しい部分はそこから最後の\と部分文字列を見つけることです:/ –

+0

申し訳ありません、@Viktor、私はもう少し質問を読んでいたはずです。 – paxdiablo

1

旧式ですが、まだ...

カレントディレクトリを変数に設定する簡単な方法です。

@echo off 
cd > dir.tmp 
set /p directory= <dir.tmp 
echo %directory% <-- do whatever you want to the variable. I just did a echo.. 
del dir.tmp > nul 
+0

現在のディレクトリだけが必要な場合は、 ディレクトリを設定することができます。%CD% しかし、@ ViktorSehrは、バッチファイルがファイルとして存在するディレクトリ。 –