我有一个包含路径列表的文件。其中一些可能包含环境变量,例如%USERPROFILE%
。
示例:
%USERPROFILE%\dir
C:\another\dir
然后我使用此代码读取所有行并与;
连接(由于git,cat和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%
运行它只会输出原始字符串,而不会展开%USERPATH%
我的最终计划是将目录添加到我的PATH中,例如set PATH=%include_content%;%PATH%
,但这不起作用,因为变量没有扩展。
我的问题是,我可以以某种方式扩展字符串中的变量,以便将真实目录添加到路径中吗?
答案 0 :(得分:3)
您可以使用CALL
重新分析一行。
所以这应该做的工作
call set "include_content=%include_content%"
for for循环
答案 1 :(得分:2)
根据jeb的回答,您可能希望阻止将同一目录多次添加到%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%