Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Windows 带有包含&;的变量的批处理脚本;_Windows_Batch File_Escaping_Special Characters - Fatal编程技术网

Windows 带有包含&;的变量的批处理脚本;

Windows 带有包含&;的变量的批处理脚本;,windows,batch-file,escaping,special-characters,Windows,Batch File,Escaping,Special Characters,我正在尝试创建一个批处理文件,该文件执行一个命令(mvn tomcat7:run),其中包含基于批处理文件中某些参数的自定义参数: @ECHO关闭 SETLOCAL EnableDelayedExpansion 设置参数= :循环 如果不是“%1”,则为( 如果“%1”=“本地mysql”( 设置args=!args!-Dds.user=user 设置args=!args!-Dds.pwd=密码 设置args=!args!-Dhibernate.hbm2ddl.auto=update 设置arg

我正在尝试创建一个批处理文件,该文件执行一个命令(
mvn tomcat7:run
),其中包含基于批处理文件中某些参数的自定义参数:

@ECHO关闭
SETLOCAL EnableDelayedExpansion
设置参数=
:循环
如果不是“%1”,则为(
如果“%1”=“本地mysql”(
设置args=!args!-Dds.user=user
设置args=!args!-Dds.pwd=密码
设置args=!args!-Dhibernate.hbm2ddl.auto=update
设置args=!args!-Dds.url=jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=UTF-8&charSet=UTF-8&useSSL=false
)
如果“%1”=“本地其他服务”(
set args=!args!-Dother.service.url=localhost:8085/其他服务
)
移位
转到:循环
)
mvn tomcat7:运行%args%
:结束
这不起作用,因为行
set args=!阿格斯-Dds.url=jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=UTF-8&charSet=UTF-8&usesl=false
,因为
&
符号生成新行。我尝试过使用转义字符,但这似乎只是转义一次到变量中,然后同样的问题发生在我下次尝试读取变量时


有人能帮忙吗?我是一个批处理的noob。

这个
&
符号没有换行,它只是分隔命令。但是,在双引号中,大多数特殊字符都会失去其功能,因此只需引用您的
set
命令即可

set“args=!args!-Dds.user=user”
设置“args=!args!-Dds.pwd=密码”
设置“args=!args!-Dhibernate.hbm2ddl.auto=update”
设置“args=!args!-Dds.url=jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=UTF-8&charSet=UTF-8&useSSL=false“

用引号括起来?设置参数=!阿格斯!“-Dds.url=jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=UTF-8&charSet=UTF-8&useSSL=false”)这包括args变量中的引号,我不需要它。不管您需要什么。您必须这样做以保护.bat文件中的任何特殊字符。如果你不想使用引号,那么你需要对特殊字符进行转义。先生,这是批处理语言(我喜欢)的许多缺点之一。如果您是一个批处理noob,那么使用更强大的语言(如PowerShell)可能是一个不错的计划。它更难学习,但没有所有的解决方法。这会正确设置变量,但当我尝试执行行
mvn tomcat7:run%args%
时,它会再次将其分离。我也可以引用我的方法吗?我不知道mvn对它的参数做了什么,但是
“tomcat7:run%args%”
可能有效。为什么不试试呢?不管怎样,只要避免麻烦,把cmd扔掉就行了。使用powershell而不是为什么不试试呢?(您甚至可以坚持使用
!args!
而不是
%args%