2016-10-17 80 views
3

我正在尝试通过批号传递脱字符字符。逃脱他们一次会很容易,但我需要做两次。 我有一个基于Regex表达式(不是我的代码)备份表的可执行文件。 我想用排除列表备份所有表格。 使用^(?!tableName$).*适用于单个表格。通过管道|和caret^chars through batch CALL

批处理文件1(来自命令行调用)

SET ignoreTables=tableName 
:: Call the backup script 
CALL SecondBatch.bat %ignoreTables% 

批处理文件2

:: Passthrough ignoreTables 
Executable.exe --ignoreTablesPattern="^(?!%1$).*" 

但是我想忽略多个表。在正则表达式中,这意味着使用| (管)字符例如; tableOne|tableTwo需要;

SET ignoreTables=tableOne^|tableTwo

哪个是正确的SET,但不是在传递给CALL

正确的输出是通过命令行的工作原理是,

Executable.exe --ignoreTablesPattern="^(?!tableOne|tableTwo$).*" 

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

+0

注意:如果我可以使用^表来匹配以“table”开头的所有表格,但我也有同样的问题试图逃脱^ ^脱离第一批! – Josh

回答

1

在批处理文件1个用途:

SET "ignoreTables=tableOne|tableTwo" 
:: Call the backup script 
CALL SecondBatch.bat "%ignoreTables%" 

而在批处理文件2使用:在命令提示符窗口cmd /?和读取输出帮助页面,特别是最后一段上

:: Passthrough ignoreTables 
Executable.exe --ignoreTablesPattern="^(?!%~1).*$" 

运行需要围绕目录/文件名或参数字符串使用双引号时的最后一个帮助页面。

批处理文件1的第一行包含命令SET,参数字符串为variable=value。通过将此参数字符串括在双引号中,管道字符不再被解释为运算符。有关使用到环境变量指定的字符串双引号的详细信息请参见Why is no string output with 'echo %var%' after using 'set var = text' on command line?

环境变量的值答案传递未来扩展为第一个参数批处理文件需要2再次周围的双引号传递包含|作为文字字符串到第二个批处理文件的字符串。

在第二个批处理文件中,需要引用第一个参数而不包含引号。因此现在使用%~1而不是%1,如命令CALL帮助中所述,在命令提示符窗口call /?中运行输出。

顺便说一句:我很确定$应该是在正则表达式的结尾,而不是在负向前视。

+0

谢谢莫菲。我曾尝试过引语,但不是围绕整个SET。我知道这可能会以某种方式。一旦你知道如何,它看起来很容易。 – Josh