Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用多行设置路径_Batch File - Fatal编程技术网

Batch file 使用多行设置路径

Batch file 使用多行设置路径,batch-file,Batch File,在批处理文件中,我需要向PATH env变量添加一些路径。由于它是一个较大的长路径数,我试图将它们分散在多行上,并试图通过缩进行使bat文件尽可能干净 但换行符开头的空格(以及%路径中的空格)似乎被解释为实际路径的一部分。 所以 不工作(找不到程序)。有什么窍门我可以用吗? 因为它是一个中等复杂的批处理文件,所以一些缩进会很好。没有办法让PATH忽略前导空格。如果您想要缩进线,我看到两种可能的选择: 选项1-使用未定义的变量进行缩进,因此值中永远不会出现空格 @echo off SET PATH

在批处理文件中,我需要向PATH env变量添加一些路径。由于它是一个较大的长路径数,我试图将它们分散在多行上,并试图通过缩进行使bat文件尽可能干净

但换行符开头的空格(以及%路径中的空格)似乎被解释为实际路径的一部分。 所以

不工作(找不到程序)。有什么窍门我可以用吗?
因为它是一个中等复杂的批处理文件,所以一些缩进会很好。

没有办法让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%
检查变量的值?删除缩进空格,它就会工作…我正在将此选项添加到我的答案中,这时您的答案弹出:-),因此我取消了编辑,因为我想在前面添加