Batch file 如何在批处理文件中设置多行字符串替换

Batch file 如何在批处理文件中设置多行字符串替换,batch-file,batch-processing,Batch File,Batch Processing,我正在开发一个bat文件来运行我的实验,每个alpha有两个不同的参数1有10个ws值,我使用bat文件来更改实验代码中的变量,并在每个alpha文件夹中创建20个alpha文件和10个子文件夹,我看不出问题出在哪里 @Echo off SET "file=synch-ring.f" SET /a Line#ToSearch1=14 SET /a Line#ToSearch2=27 FOR /L %%I IN (1,1,20) do ( FOR /L %%J IN (1,1,10) do ( m

我正在开发一个bat文件来运行我的实验,每个alpha有两个不同的参数1有10个ws值,我使用bat文件来更改实验代码中的变量,并在每个alpha文件夹中创建20个alpha文件和10个子文件夹,我看不出问题出在哪里

@Echo off
SET "file=synch-ring.f"
SET /a Line#ToSearch1=14
SET /a Line#ToSearch2=27
FOR /L %%I IN (1,1,20) do (
FOR /L %%J IN (1,1,10) do (
md %%I
md %%I\%%J
(FOR /f "tokens=1*delims=:" %%a IN ('findstr /n "^" "%file%"') DO (
    SET "Line=%%a"
    IF %%a equ %Line#ToSearch% SET "Line=        Alpha1=%%I"
    SETLOCAL ENABLEDELAYEDEXPANSION
    ECHO(!Line! 
    ENDLOCAL
    IF %%a equ %Line#ToSearch2% SET "Line=        ws=%%J"
    SETLOCAL ENABLEDELAYEDEXPANSION
    ECHO(!Line!
    ENDLOCAL
    ))"%%J.f"
Move %%J.f %%I\%%J
))
pause

我不确定我是否正确理解了您的意图,但这可能对您有所帮助:

@Echo关闭
设置“file=synch ring.f”
设置“Line#ToSearch1=14”
设置“Line#ToSearch2=27”
如果不存在“%file%”退出/B
对于(1,1,20)Do中的/L%%I(
对于(1,1,10)Do中的/L%%J(
MD“%%I\%%J”2>Nul
(
对于/F“Tokens=1*Delims=:”%%A In('FindStr/N“^”“%file%”
)做(
如果%%A NEq%行#搜索%(
如果%%A NEq%行#搜索2%(
回声=%%B
)否则(
Echo=ws=%%J
)
)否则(
Echo=Alpha1=%%I”
)
)
)>“%%I\%%J\%%J.f”
)
)
暂停

存在多个问题。首先,在不知道文件内容的情况下,我们无法查看批处理文件的功能。
同步环.f
。其次,代码中没有将输出重定向到文件以处理标准输出。请阅读有关Microsoft的文章。第三,为什么要使用
“%%J.f“
下一步移动由于缺少
而未创建的文件?”?最好是
“%%I\%%J\%%J.f”
并删除move命令,以便直接在适当的目录中创建文件。第四,如果只为环境变量分配字符串或数字,请不要使用
set/A
。通常,完全不需要使用算术表达式将字符串(如
14
27
)分配给环境变量,而环境变量始终为字符串类型。整数类型的环境变量是不可能的。第五,根据文件
synch ring.f
的内容,如果“%%~a”=%Line#ToSearch%”由于依赖于循环变量
a
的值的语法错误而导致批处理文件执行退出,则使用字符串比较比使用整数比较可能更好。