2011-02-09 250 views
3

然而,这是一个非常具体的问题;批处理文件字符串操作

说我有运行从\批处理文件所在的目录c:\data\src\branch_1

如何在批处理文件我的环境变量%buildpath%设置为c:\build\bin\branch_1

(要格外清楚,如果同样的批处理文件位于c:\foo\bar\branch_2我想它设置%buildpath%c:\build\bin\branch_2

回答

6

您应该能够使用环境变量%~dp0让你的驱动器和路径批处理文件当前正在运行。从那里开始,这是一种不太有效的方法,即逐个字符串地去掉字符串并创建一个新的字符串。

例如,批处理文件:

@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返回如下:

Current directory is: C:\data\src\branch1\ 
New directory is: c:\build\bin\branch1 

至于它是如何工作的,你可以使用!xyz:~n,m!做一个环境变量的一个子,而负面的mn意味着从结尾而不是开始。因此,如果第一个if块在那里,那么它将去除尾部\

循环是类似的,但它将路径末尾的字符传输到一个新变量,直到找到\。那么你有最后的路径,并且将它附加到固定的新路径是一件简单的事情。

+0

不错,只是在看这一点,并使用在0%与%〜迪%〜PI:P – Leigh 2011-02-09 10:28:45

+0

谢谢,但,这是比较容易的部分。最难的部分是从那里找到最后的\和子字符串:/ – 2011-02-09 10:41:06

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