Batch file 使用多行设置路径
在批处理文件中,我需要向PATH env变量添加一些路径。由于它是一个较大的长路径数,我试图将它们分散在多行上,并试图通过缩进行使bat文件尽可能干净 但换行符开头的空格(以及%路径中的空格)似乎被解释为实际路径的一部分。 所以 不工作(找不到程序)。有什么窍门我可以用吗?Batch file 使用多行设置路径,batch-file,Batch File,在批处理文件中,我需要向PATH env变量添加一些路径。由于它是一个较大的长路径数,我试图将它们分散在多行上,并试图通过缩进行使bat文件尽可能干净 但换行符开头的空格(以及%路径中的空格)似乎被解释为实际路径的一部分。 所以 不工作(找不到程序)。有什么窍门我可以用吗? 因为它是一个中等复杂的批处理文件,所以一些缩进会很好。没有办法让PATH忽略前导空格。如果您想要缩进线,我看到两种可能的选择: 选项1-使用未定义的变量进行缩进,因此值中永远不会出现空格 @echo off SET PATH
因为它是一个中等复杂的批处理文件,所以一些缩进会很好。没有办法让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:; =%"
没有办法让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:; =%"
这将将额外项目追加到路径
。如果您只想构建指定的目录序列,那么首先需要将path
初始化为nothing
这将将额外项目追加到
路径
。如果您只想构建指定的目录序列,则需要首先将path
初始化为nothing。首先让我通知您,以这种方式添加到path变量仅适用于正在运行的会话。一旦cmd会话关闭,该变量将返回其以前的值
以下是一个建议,请逐个添加:
SET“ToAdd=\\where\Tools\strawberryperl\perl\site\bin;”
设置“ToAdd=%ToAdd%;\\where\Tools\strawberryperl\perl\bin;”
设置“ToAdd=%ToAdd%”;\\where\Tools\strawberryperl\c\bin
设置“ToAdd=%ToAdd%;\\where\Tools\KDiff3”
设置“路径=%PATH%;%ToAdd%”
顺便说一句,如果您希望在正在运行的会话之外添加环境变量,那么忽略任何建议您使用SETX而不是SET的人是很重要的。(变量将被截断为1024字节,因此会损坏它)。最好的解决方案包括编辑注册表,并可能使用内置工具,如powershell
编辑
\\somewhere\Tools\strawberryperl\perl\site\bin
\\somewhere\Tools\strawberryperl\perl\bin
\\somewhere\Tools\strawberryperl\c\bin
\\somewhere\Tools\KDiff3
这显示了我在评论中提到的方法,并使用了与Magoo答案相同的结构:
C:\MyDir\path.txt
\\somewhere\Tools\strawberryperl\perl\site\bin
\\somewhere\Tools\strawberryperl\perl\bin
\\somewhere\Tools\strawberryperl\c\bin
\\somewhere\Tools\KDiff3
批处理文件
@echo off
SET PATH=^
% =%\\somewhere\Tools\strawberryperl\perl\site\bin;^
% =%\\somewhere\Tools\strawberryperl\perl\bin;^
% =%\\somewhere\Tools\strawberryperl\c\bin;^
% =%\\somewhere\Tools\KDiff3;^
% =%%PATH%
@Echo关闭
SetLocal EnableDelayedExpansion
对于/F“UseBackQDelims=“([C:\MyDir\Path.txt”)中的%%A,请设置“Path=!Path!;%%~A”
回显(%Path%)
端部
超时-1
这意味着您每次只需要包含for循环,而不是向其中添加每个路径。首先,让我通知您,以这种方式添加到PATH变量仅适用于正在运行的会话。一旦cmd会话关闭,该变量将返回其以前的值 以下是一个建议,请逐个添加:
SET“ToAdd=\\where\Tools\strawberryperl\perl\site\bin;”
设置“ToAdd=%ToAdd%;\\where\Tools\strawberryperl\perl\bin;”
设置“ToAdd=%ToAdd%”;\\where\Tools\strawberryperl\c\bin
设置“ToAdd=%ToAdd%;\\where\Tools\KDiff3”
设置“路径=%PATH%;%ToAdd%”
顺便说一句,如果您希望在正在运行的会话之外添加环境变量,那么忽略任何建议您使用SETX而不是SET的人是很重要的。(该变量将被截断为1024字节,因此会损坏它)。您最好的解决方案包括编辑注册表,并可能使用powershell等内置工具
编辑
\\somewhere\Tools\strawberryperl\perl\site\bin
\\somewhere\Tools\strawberryperl\perl\bin
\\somewhere\Tools\strawberryperl\c\bin
\\somewhere\Tools\KDiff3
这显示了我在评论中提到的方法,并使用了与Magoo答案相同的结构:
C:\MyDir\path.txt
\\somewhere\Tools\strawberryperl\perl\site\bin
\\somewhere\Tools\strawberryperl\perl\bin
\\somewhere\Tools\strawberryperl\c\bin
\\somewhere\Tools\KDiff3
批处理文件
@echo off
SET PATH=^
% =%\\somewhere\Tools\strawberryperl\perl\site\bin;^
% =%\\somewhere\Tools\strawberryperl\perl\bin;^
% =%\\somewhere\Tools\strawberryperl\c\bin;^
% =%\\somewhere\Tools\KDiff3;^
% =%%PATH%
@Echo关闭
SetLocal EnableDelayedExpansion
对于/F“UseBackQDelims=“([C:\MyDir\Path.txt”)中的%%A,请设置“Path=!Path!;%%~A”
回显(%Path%)
端部
超时-1
这意味着您每次只需要包含for循环,而不是将每个路径都添加到其中。甚至都不防弹,但Magoo的回答提醒了我这一点。只是因为某个地方的某个人可以找到此结构的更好用法
@echo关闭
setlocal enableextensions disabledelayedexpansion
对于/f“delims=“%%a in('echo”%path:;=“”%)
“\\where\Tools\strawberryperl\perl\site\bin”
“\\where\Tools\strawberryperl\perl\bin”
“\\where\Tools\strawberryperl\c\bin”
“\\where\Tools\KDiff3”
“”)do(set“path=%%~a”)&调用set“path=%%%path:”“=;%%”
路径
甚至连一点都不防弹,但Magoo的回答提醒了我这一点。只是因为某个地方的某个人可以找到这种结构的更好用法
@echo关闭
setlocal enableextensions disabledelayedexpansion
对于/f“delims=“%%a in('echo”%path:;=“”%)
“\\where\Tools\strawberryperl\perl\site\bin”
“\\where\Tools\strawberryperl\perl\bin”
“\\where\Tools\strawberryperl\c\bin”
“\\where\Tools\KDiff3”
“”)do(set“path=%%~a”)&调用set“path=%%%path:”“=;%%”
路径
我认为您必须在那里放置一个前导;
,因为路径变量通常以无前导结尾。您是否尝试过使用echo%Path%
检查变量的值?删除缩进空格,它会起作用…我认为您必须在那里放置一个前导;
,因为路径变量通常以无前导结尾。您是否尝试过使用echo%PATH%
检查变量的值?删除缩进空格,它就会工作…我正在将此选项添加到我的答案中,这时您的答案弹出:-),因此我取消了编辑,因为我想在前面添加