0

我正在尝试让一个批处理文件创建另一个可以由第一个批处理文件调用的批处理文件。

我需要让它使用令牌输出一个 for 循环。对于变量,我可以在两端添加一个额外的 % ,以便将 %variable% 输出到文件中。但是 %%i 以 %i 的形式出现(只有一个 % 符号)。我试过克拉,括号,移动riderects,引号,额外的%符号等......我一生无法弄清楚如何让它只打印%%i到文件。

示例代码:

echo FOR /f "delims=" %%i IN ('commands') DO CALL :process %%i > temp.bat

但无论我尝试什么,我最终都会得到以下结果:

echo FOR /f "delims=" %i IN ('commands') DO CALL :process %i > temp.bat

我该如何解决这个问题?有没有比 echo > file 更好的重定向文本的方法?

谢谢!

4

1 回答 1

4

%逃脱%%将您想要逐字复制的每一个内容都加倍。

@ECHO OFF
SETLOCAL
echo FOR /f "delims=" %%i IN ('commands') DO CALL :process %%i > temp.bat
echo FOR /f "delims=" %%%%i IN ('commands') DO CALL :process %%%%i >> temp.bat
echo FOR /f "delims=" %%%%i IN ('commands') DO CALL :process %%%%i ^>^> temp.bat >> temp.bat
GOTO :EOF

结果

FOR /f "delims=" %i IN ('commands') DO CALL :process %i 
FOR /f "delims=" %%i IN ('commands') DO CALL :process %%i 
FOR /f "delims=" %%i IN ('commands') DO CALL :process %%i >> temp.bat 

线路终端空间的有益教训;由于所需文本和文件名重定向器之间的空格,以这种方式生成的每一行都将包含一个终端空格。将重定向器和文件名移动到行首将仅重现真实的终端空间

>> temp.bat echo FOR /f "delims=" %%%%i IN ('commands') DO CALL :process %%%%i
于 2013-07-17T05:55:56.683 回答