如何将参数传递给包含%而没有"破坏"的批处理文件?

Eil*_*idh 5 batch-file

问题

在主批处理文件中,值从.txt文件中提取(并SET作为此批处理文件中的变量值).这些值可能都包含%字符.

这些是从.txt文件中读取的,没有任何问题.但是,当具有包含%字符的值的变量传递给第二个批处理文件时,第二个批处理文件会将任何%字符解释为变量展开.(注意:无法控制第二个批处理文件.)

echo %PERCENTVARIABLE%
Run Code Online (Sandbox Code Playgroud)

输出: I%LOVE%PERCENT%CHARACTERS%

当传递给第二个文件然后回声时,将(可能)变为IPERCENT,因为它解释%LOVE%%CHARACTERS%取消设置变量.


研究

我找到了在批处理文件中查找和替换字符串中的元素的语法,因为我认为我可能会替换一个%字符%%以逃避它.但是我无法让它发挥作用.

语法是 -

set string=This is my string to work with.
set string=%string:work=play%
echo %string%
Run Code Online (Sandbox Code Playgroud)

然后输出的地方This is my string to play with..


问题

  1. 是否可以%使用变量中的查找和替换语法来转义字符?(如果没有,还有另一种方式吗?)
  2. 这样做是否明智?(使用这些转义字符会导致第二个批处理文件中的任何问题(如上所述)我们无法控制吗?)
  3. 如果上述情况不可能,还有其他方法可以解决这个问题吗?

elz*_*ico 1

或许...?

输入.txt

I%LOVE%PERCENT%CHARACTERS%
Run Code Online (Sandbox Code Playgroud)

批处理1.bat

@echo off
setlocal enableDelayedExpansion
set/P var=<input.txt
echo(In batch 1 var content: %var%

set "var=!var:%%=%%%%!"
call batch2.bat "%var%"
endlocal
exit/B
Run Code Online (Sandbox Code Playgroud)

批处理2.bat

@echo off
set "var=%~1"
echo(In batch 2 var content: %var%
exit/B
Run Code Online (Sandbox Code Playgroud)