batch-file - 通管 |和插入符 ^ 字符通过批处理 CALL

标签 batch-file

我正在尝试通过批处理传递插入符号。 逃脱一次很容易,但我需要做两次。 我有一个可执行文件,它将根据 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/

相关文章:

scripting - IF ELSE 问题 COMMAND BATCH

file - 编辑平面文件以在每行上包含特定数量的字符?

Windows 批处理 : Set Variables from Text File

windows - Batch 中引用文件名的问题

bash - 从 PuTTY 运行的 shell 脚本返回代码到调用批处理文件?

file - 如何通过批处理文件将命令作为命令行参数传递

windows - BATCH : How to capture the extension of the file, 或如何进行正则表达式之类的模式测试

c# - 使用批处理文件创建进程时设置优先级

windows - 有没有办法解决这个推送错误?

text - 在批处理文件中显示.txt文件中的文本