2015-01-23 3 views
1

경로 목록이있는 파일이 있습니다. 그들 중 일부는 %USERPROFILE%과 같은 환경 변수를 포함 할 수 있습니다.파일에서 문자열을 읽는 중에 환경 변수를 확장하는 방법은 무엇입니까?

예 : 다음 모든 라인을 읽고이 코드를 사용 ;과 합치하고있어

%USERPROFILE%\dir 
C:\another\dir 

(고양이와 TR 명령 때문에 자식의 수 있습니다) :

set include_file=C:\path\to\file.txt 
for /f "delims=" %%i in ('cat %include_file% ^| tr "\\n" ";"') do set include_content=%%i 

이 (가) 작성 문자열이 포함 된 변수 %USERPROFILE%\dir;C:\another\dir 일반적으로 echo %USERPROFILE%을 실행하면 C:\Users\xxx\dir과 같은 결과를 얻지 만 %include_content%을 실행하면 origi %USERPATH%

내 마지막 계획은 set PATH=%include_content%;%PATH%과 같이 내 PATH에 디렉토리를 추가하는 것이지만 변수가 확장되지 않았기 때문에이 방법은 작동하지 않습니다.

내 질문은 어쨌든 실제 디렉토리가 경로에 추가되도록 문자열의 변수를 확장 할 수 있습니까?

답변

3

CALL을 사용하여 회선을 다시 분석 할 수 있습니다.

그래서이 젭의 대답에 루프 작업을

+0

간단하고 완벽하게 작동합니다. 감사! – Fuze

2

Buliding을 한 후

call set "include_content=%include_content%" 

을 수행해야합니다, 당신은 %PATH% 여러 번에 추가되는 같은 디렉토리를 방지 할 수 있습니다. 이렇게하려면 %PATH%%include_content%에있는 각 디렉터리를 반복합니다.

@echo off 
setlocal enabledelayedexpansion 

set include_file=test.txt 
for /f "delims=" %%i in ('cat %include_file% ^| tr "\n" ";"') do set "include_content=%%i" 

call set "include_content=%include_content%" 

for %%I in ("%include_content:;=" "%") do if exist "%%~I" (
    set found= 
    for %%J in ("%PATH:;=" "%") do (
     if /I "%%~I"=="%%~J" set found=1 
    ) 
    if not defined found set "PATH=!PATH!;%%~I" 
) 

:: uncomment to make permanent 
rem setX PATH %PATH% 
echo %PATH% 
+0

경로 변수의 문제를 피하는 데 매우 유용합니다. – jeb

관련 문제