gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:11:02 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com