通管|和插入符号^通过批量调用

时间:2016-10-17 05:22:57

标签: batch-file

我试图通过批量传递插入符号。 逃离它们一次很容易,但我需要做两次。 我有一个可执行文件,它将根据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$).*"

如何从批处理文件中获取此结果?

1 个答案:

答案 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 /?

顺便说一句:我非常确定$应该在正则表达式的末尾,而不是在负向前瞻内。