我试图通过批量传递插入符号。
逃离它们一次很容易,但我需要做两次。
我有一个可执行文件,它将根据Regex表达式(而不是我的代码)备份表。
我想用排除列表备份所有表。
使用^(?!tableName$).*
适用于单个表。
批处理文件1(从命令行调用)
SET ignoreTables=tableName
:: Call the backup script
CALL SecondBatch.bat %ignoreTables%
批处理文件2
:: Passthrough ignoreTables
Executable.exe --ignoreTablesPattern="^(?!%1$).*"
但是我想忽略多个表格。在Regex中,这意味着使用| (管道)字符例如; tableOne|tableTwo
需要;
SET ignoreTables=tableOne^|tableTwo
SET
哪个正确,但传递给CALL
从命令行运行的正确输出是;
Executable.exe --ignoreTablesPattern="^(?!tableOne|tableTwo$).*"
如何从批处理文件中获取此结果?
答案 0 :(得分:1)
在批处理文件1中使用:
SET "ignoreTables=tableOne|tableTwo"
:: Call the backup script
CALL SecondBatch.bat "%ignoreTables%"
在批处理文件2中使用:
:: Passthrough ignoreTables
Executable.exe --ignoreTablesPattern="^(?!%~1).*$"
在命令提示符窗口cmd /?
中运行并阅读输出帮助页面,尤其是最后一个帮助页面上的最后一段,当涉及目录/文件名或带双引号的参数字符串时,该页面是必需的。
批处理文件1的第一行包含命令 SET ,参数字符串为variable=value
。通过将此参数字符串括在双引号中,管道字符不再被解释为运算符。有关在将字符串分配给环境变量时使用双引号的更多详细信息,请参阅Why is no string output with 'echo %var%' after using 'set var = text' on command line?
环境变量的值接下来传递为第一个参数扩展到批处理文件2.再次需要使用双引号将包含|
的字符串作为文字字符串传递给第二个批处理文件。
在第二个批处理文件中,必须引用第一个参数而不包含引号。因此,在命令提示符窗口%~1
中运行的命令 CALL 输出的帮助中,现在使用%1
代替call /?
。
顺便说一句:我非常确定$
应该在正则表达式的末尾,而不是在负向前瞻内。