在批处理文件中嵌套循环

use*_*191 0 batch-file batch-processing

我想在批处理文件中嵌套for循环以删除回车.我尝试过就像你可以看到下面但它不起作用.

@echo off
setLocal EnableDelayedExpansion

for /f "tokens=* delims= " %%a in (Listfile.txt) do (
    set /a N+=1
    set v!N!=%%a
)

for /l %%i in (1, 1, %N%) do (
    echo !v%%i!
    for /r "tokens=* delims=" %%i in (windows.cpp) do (
        echo %%i >> Linux11.cpp
    )
)
pause
Run Code Online (Sandbox Code Playgroud)

在这里,我想检查一下windows.cpp.如果它的工作,我喜欢改变Windows .cpp与!v %%我!

Joe*_*oey 7

您不能在批处理文件中执行此操作.您无法寻址或写入任意字符.Windows上的每个工具通常都会确保输出Windows换行符(即CR + LF).有些人可以很好地阅读 Unix风格的换行符,这就是为什么你可以轻松地它们转换.但他们来说是不可能的.

另外需要注意的是:源代码文件通常包含空白行(至少是我的),以提高可读性.for /f跳过空行,这就是为什么你要为那里的人类读者修改文件的原因.请不要这样做.

至于你的问题:当嵌套两个循环时,你必须确保它们不使用相同的循环变量.给我看一个像你写的代码实际工作的语言.

就像是

for /l %%i in (1, 1, %N%) do ( 
  echo !v%%i! 
  for /f "tokens=* delims=" %%l in ("!v%%i!") do (   
    rem do whatever you want to do with the lines      )
)
Run Code Online (Sandbox Code Playgroud)

应该工作得更好(你错过了最后的右括号).要记住:如果你想使用某个变量而不是固定的文件名,它肯定有助于用该变量替换那个固定的文件名.