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%
)