- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过批处理传递插入符号。逃脱一次很容易,但我需要做两次。我有一个可执行文件,它将根据 Regex 表达式(不是我的代码)备份表。我想用排除列表备份所有表。使用 ^(?!tableName$).*
适用于单个表。
批处理文件 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$).*"
我怎样才能从批处理文件中得到这个结果?
最佳答案
在批处理文件 1 中使用:
SET "ignoreTables=tableOne|tableTwo"
:: Call the backup script
CALL SecondBatch.bat "%ignoreTables%"
在批处理文件 2 中使用:
:: Passthrough ignoreTables
Executable.exe --ignoreTablesPattern="^(?!%~1).*$"
在命令提示符窗口中运行 cmd/?
并阅读输出的帮助页面,尤其是最后一个帮助页面的最后一段,它是关于用双引号将目录/文件名或参数字符串括起来的是必需的。
批处理文件 1 的第一行包含带有参数字符串 variable=value
的命令 SET。通过将此参数字符串括在双引号中,管道字符不再被解释为运算符。有关在将字符串分配给环境变量时使用双引号的更多详细信息,请参阅 Why is no string output with 'echo %var%' after using 'set var = text' on command line? 上的答案
环境变量的值接下来作为第一个参数扩展传递给批处理文件 2。再次需要用双引号将包含 |
的字符串作为文字字符串传递给第二个批处理文件。
在第二个批处理文件中,需要引用第一个参数而不用引号引起来。因此,现在使用 %~1
而不是 %1
,如在命令提示符窗口 中运行时命令 CALL 输出的帮助中所述调用/?
。
顺便说一句:我很确定 $
应该在正则表达式的末尾,而不是在否定先行中。
关于batch-file - 通管 |和插入符 ^ 字符通过批处理 CALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40078990/
我是一名优秀的程序员,十分优秀!