然而,这是一个非常具体的问题;批处理文件字符串操作
说我有运行从\批处理文件所在的目录c:\data\src\branch_1
如何在批处理文件我的环境变量%buildpath%
设置为c:\build\bin\branch_1
?
(要格外清楚,如果同样的批处理文件位于c:\foo\bar\branch_2
我想它设置%buildpath%
到c:\build\bin\branch_2
)
然而,这是一个非常具体的问题;批处理文件字符串操作
说我有运行从\批处理文件所在的目录c:\data\src\branch_1
如何在批处理文件我的环境变量%buildpath%
设置为c:\build\bin\branch_1
?
(要格外清楚,如果同样的批处理文件位于c:\foo\bar\branch_2
我想它设置%buildpath%
到c:\build\bin\branch_2
)
您应该能够使用环境变量%~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!
做一个环境变量的一个子,而负面的m
或n
意味着从结尾而不是开始。因此,如果第一个if
块在那里,那么它将去除尾部\
。
循环是类似的,但它将路径末尾的字符传输到一个新变量,直到找到\
。那么你有最后的路径,并且将它附加到固定的新路径是一件简单的事情。
老案件,但仍...
设置当前目录为变量的简单方法。
@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%与%〜迪%〜PI:P – Leigh 2011-02-09 10:28:45
谢谢,但,这是比较容易的部分。最难的部分是从那里找到最后的\和子字符串:/ – 2011-02-09 10:41:06