在批处理文件中,我需要添加一些路径到PATH env变量。由于它是一个较大的长路径数,我试图将它们分散在多行上,并尝试通过缩进线条使蝙蝠文件尽可能干净。
但似乎换行符开头的空格(以及%PATH%中的空格)被解释为实际路径的一部分。 所以
SET PATH=^
\\somewhere\Tools\strawberryperl\perl\site\bin;^
\\somewhere\Tools\strawberryperl\perl\bin;^
\\somewhere\Tools\strawberryperl\c\bin;^
\\somewhere\Tools\KDiff3;^
%PATH%
不起作用(找不到程序)。我可以使用一些技巧吗? 因为它是一个中等复杂的批处理文件,所以一些缩进会很好。
答案 0 :(得分:3)
for %%x in (
"\\somewhere\Tools\strawberryperl\perl\site\bin;"
"\\somewhere\Tools\strawberryperl\perl\bin;"
"\\somewhere\Tools\strawberryperl\c\bin;"
"\\somewhere\Tools\KDiff3;"
) do call set "path=%%path%%%%~x"
这将追加额外的项目path
。如果您只想构建指定的目录序列,则需要先将path
初始化为 nothing 。
答案 1 :(得分:2)
没有办法让PATH忽略前导空格。如果你想要缩进行,我会看到两个可能的选项:
选项1 - 使用未定义的变量进行缩进,因此空格永远不会进入值
@echo off
SET PATH=^
% =%\\somewhere\Tools\strawberryperl\perl\site\bin;^
% =%\\somewhere\Tools\strawberryperl\perl\bin;^
% =%\\somewhere\Tools\strawberryperl\c\bin;^
% =%\\somewhere\Tools\KDiff3;^
% =%%PATH%
选项2 - 之后删除空格
@echo off
SET PATH=^
\\somewhere\Tools\strawberryperl\perl\site\bin;^
\\somewhere\Tools\strawberryperl\perl\bin;^
\\somewhere\Tools\strawberryperl\c\bin;^
\\somewhere\Tools\KDiff3;^
%PATH%
set "PATH=%PATH:; =%"
答案 2 :(得分:1)
首先让我先告诉您,以这种方式添加PATH变量仅适用于正在运行的会话。关闭cmd会话后,该变量将返回其先前的值。
这是一个建议,逐个添加每个添加:
SET "ToAdd=\\somewhere\Tools\strawberryperl\perl\site\bin;"
SET "ToAdd=%ToAdd%;\\somewhere\Tools\strawberryperl\perl\bin;"
SET "ToAdd=%ToAdd%;\\somewhere\Tools\strawberryperl\c\bin;"
SET "ToAdd=%ToAdd%;\\somewhere\Tools\KDiff3"
SET "PATH=%PATH%;%ToAdd%"
顺便说一下,如果您希望在运行会话之外添加环境变量,那么忽略任何建议您使用SETX而不是SET的人都很重要。 (该变量将被截断为1024字节,因此会破坏它)。您最好的解决方案将涉及编辑注册表,并可能使用内置工具,如powershell。
修改强>
这显示了我的评论中提到的方法,并使用与Magoo的答案相同的结构:
<强> C:\ MYDIR \ Paths.txt 强>
\\somewhere\Tools\strawberryperl\perl\site\bin
\\somewhere\Tools\strawberryperl\perl\bin
\\somewhere\Tools\strawberryperl\c\bin
\\somewhere\Tools\KDiff3
批处理文件
@Echo Off
SetLocal EnableDelayedExpansion
For /F "UseBackQDelims=" %%A In ("C:\MyDir\paths.txt") Do Set "Path=!Path!;%%~A"
Echo(%Path%
EndLocal
Timeout -1
这意味着您每次只需要包含for循环,而不是将每个路径添加到它。
答案 3 :(得分:0)
甚至没有远程防弹,但Magoo的回答让我想起了这个。仅仅因为某个地方的人可以找到更好的用法来构建
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('echo "%path:;=" "%"
"\\somewhere\Tools\strawberryperl\perl\site\bin"
"\\somewhere\Tools\strawberryperl\perl\bin"
"\\somewhere\Tools\strawberryperl\c\bin"
"\\somewhere\Tools\KDiff3"
""') do (set "path=%%~a") & call set "path=%%path:" "=;%%"
path