在批处理文件中使用 Echo 将 IF 语句写入文本文件

Using Echo within a Batch File to write an IF Statement to a Text File

我正在构建一个文本文件,它实际上是 Excel 的 VBA 模块,但使用批处理文件编写。我想根据用户在选择菜单上的选择动态创建它。该模块将创建一个循环以在文件夹中的所有文件中应用宏,但 MACRO 可以根据用户输入进行更改。

我遇到的问题是我无法将以下行复制到文本文件中:

 Echo If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\">>c:\users\%username%\desktop\TESTVBA.vbs

这一行上面的所有其他行都写入文件,但是这一行和下面的所有内容都不会跟过来,但我相信这与语法有关。我如何阻止它复制过来?还是不能复制过来?

每个单独的重定向器字符(><|)都需要使用脱字符号(^)进行转义,因此:

... th, 1) ^<^> "\"...

其他可能会出现问题的字符也是如此,例如 &^)) 仅在 code-block 中(括号内的序列指令)在generating代码中)

% 也需要转义——但是 % 的转义字符是另一个 %,所以 %username% 需要编码为 %%username%% - 除非您想在此处的 generating 代码中替换 username 的当前值。

您要 echo 的所有内容都应该进行转义。不幸的是,没有一种方法可以解决。每个 % 百分号都应该被配音,列表 <>&| 中的所有特殊符号都应该用 ^ 插入符号转义。以下代码将为您工作。请注意 <> 不等式运算符如何变异为 ^<^>

Echo If Right(folderPath, 1) ^<^> "\" Then folderPath = folderPath + "\"

更新

我刚刚又想起一件事。括号 () 可能会带来更多麻烦,如果它们要在代码块(括号内可执行的东西)中被 echoed。

为了消除这些问题,我建议将可打印的大量文本存储为评论并使用 for /f 阅读它们。