2011-02-09 2 views
3

이것은 매우 구체적인 질문입니다. 일괄 파일 문자열 조작

내가 c:\data\src\branch_1

가 어떻게 배치 파일에서 c:\build\bin\branch_1 내 환경 변수 %buildpath%을 설정하는 디렉토리에있는 \에서 실행하는 배치 파일을 말해봐?

당신은 당신의 드라이브와 경로를 얻기 위해 변수 %~dp0을 환경을 사용할 수 있어야

답변

6

(같은 배치 파일을 c:\foo\bar\branch_2에있는 경우 나는 그것이 %buildpath%c:\build\bin\branch_2에 설정하려면, 추가 명확하게하기 위해) 현재 실행중인 배치 파일. 거기에서 문자로 문자의 끝을 벗기고 새로운 문자열을 만드는 것은 그리 효율적이지 않습니다. 예를 들어

, 배치 파일 :

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

니스, 이걸보고 % % ~ di % ~ pi : P – Leigh

+0

% 0을 사용하고 있습니다. 고맙지 만, 그게 쉬운 부분이었습니다. 가장 어려운 부분은 거기에서 마지막 부분과 부분 문자열을 찾는 것입니다./ –

+0

죄송합니다. @ 빅토르, 좀 더 자세히 읽어야합니다. – 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은 다음과 같이 요청했습니다. 배치 파일이 파일로 존재하는 디렉토리. –