对于批处理文件,如何在使用 "set" 时向 promptString 添加换行符?

For batch files, how to add a newline character to promptString when using "set"?

我正在创建一个简单的批处理文件来为 Java 自动设置路径。以下是我目前拥有的代码。我想在输入之前的第 2 行中的“java_path”的 promptString 之后添加一些换行符。请帮忙?

@echo off
set /p java_path=Enter path to Java installation folder, including quotation marks (eg: "C:\Program Files\Java\jdk-15.0.1"): 
setx -m JAVA_HOME %java_path%
setx -m PATH "%PATH%;%java_path:"=%\bin";

根据 Compo 的评论解决。我最初的想法是,在“@echo off”的情况下,该行之后的任何“echo”都不起作用......显然我根本不理解这个命令。

@echo off
echo Enter path to Java installation folder, including quotation marks (eg: "C:\Program Files\Java\jdk-15.0.1"):
echo(
set /p java_path=
setx -m JAVA_HOME %java_path%
setx -m PATH "%PATH%;%java_path:"=%\bin";

使用我评论中的方法:

@Echo Off
:Ask
Set "java_path="
Echo Enter path to Java installation folder,
Echo  excluding quotation marks
Echo  (eg: C:\Program Files\Java\jdk-15.0.1)
Echo(
Set /P "java_path=> "
If Not Defined java_path GoTo Ask
PushD "%java_path%" 2> NUL || GoTo Ask
Set "java_path=%CD%"
PopD
Echo %java_path%
Pause

作为更复杂的替代方案,只有在输入的路径不应包含任何感叹号时才有效:

@Echo Off
(Set LF=^
% 0x0A %
) & SetLocal EnableDelayedExpansion
:Ask
Set "java_path="
Set /P "java_path=Enter path to Java installation folder,!LF! excluding quotation marks!LF! (eg: C:\Program Files\Java\jdk-15.0.1)!LF!!LF!> "
If Not Defined java_path GoTo Ask
PushD "%java_path%" 2> NUL && (Set "java_path=!CD!" & PopD) || GoTo Ask
Echo %java_path%
Pause
EndLocal

我不包括 'admin' setx 命令,因为我认为没有必要修改 %Path% 环境变量,而且你永远不应该使用setx.exe 这样做。

因为%Path%变量是特殊的,不像标准变量,它包含来自系统和用户环境的值。一旦将 %Path%/M 一起使用,您就将用户 Path 的内容永久添加到系统 Path。当您稍后 Echo %Path% 时,您会发现您拥有所有先前用户 Path 变量内容的重复条目。