Batch file cmd中的for loop命令存在问题
我正在.bat文件中运行下面给出的类似命令:Batch file cmd中的for loop命令存在问题,batch-file,Batch File,我正在.bat文件中运行下面给出的类似命令: @echo off FOR /l %%g in (1,1,100) do ( set /a "j=%%g+1" python main.py --s filename%%g.txt --d filename%%j.txt ) 希望有一个循环命令,如: python main.py --s filename1.txt --d filename2.txt python main.py --s filename2.txt --d filename3.tx
@echo off
FOR /l %%g in (1,1,100) do (
set /a "j=%%g+1"
python main.py --s filename%%g.txt --d filename%%j.txt
)
希望有一个循环命令,如:
python main.py --s filename1.txt --d filename2.txt
python main.py --s filename2.txt --d filename3.txt
... so on
但是没有得到我想要的输出。请帮忙 这就是您想要做的,或者使用加法(
+
)
简短的版本
@echo off
setlocal enabledelayedexpansion
FOR /l %%g in (1,1,100) do (
set /a j=%%g+1
python main.py --s filename%%g.txt --d filename!j!.txt
)
一个较长的版本,但创建了两个变量:
@echo off
setlocal enabledelayedexpansion
FOR /l %%g in (1,1,100) do (
set prev=%%g
set /a curr=prev+1
python main.py --s filename!prev!.txt --d filename!curr!.txt
)
或者使用演绎法(-
):
在本例中,我们将
/l
循环设置为从2
开始,将1
设置为101
,然后在循环内扣除一个值。注意,此处需要进行延迟扩展。问题在于,在命令开始运行之前对变量进行求值,而用括号括起来的命令的求值方式与在同一行中的命令相同
另外,j
是一个变量,而不是一个参数(可能您想编写%j%
而不是%j
)
要解决前一个问题,您必须使用,并使用感叹号访问变量j
:!j代码>
这将尽可能晚地评估变量,使其即使在for循环中也能工作:
@echo off
setlocal EnableDelayedExpansion
FOR /l %%g in (1,1,100) do (
set /a "j=%%g+1"
python main.py --s filename%%g.txt --d filename!j!.txt
)
您混淆了元变量(如%%g
)和正常环境变量(用设置,如代码中的j
)的;后者通常被访问(扩展、读取),如%j%
,或启用后,如!j
,这是您的情况所必需的,因为您在同一行或同一代码块中写入和读取变量(如for
循环的主体);或者,您可以在python
调用之前使用call
命令编写%%j%%
,而不是%j%%
。您可以帮我编写一个示例代码吗。我不太了解批处理文件和命令行编码@aschipflAs我们不知道python命令的作用,我想我应该提到,如果它在filename1
上工作以输出到filename2
,那么下一个循环将在新的输出文件上工作。因此,使用(100,-1,1)
可能比较谨慎。
@echo off
setlocal EnableDelayedExpansion
FOR /l %%g in (1,1,100) do (
set /a "j=%%g+1"
python main.py --s filename%%g.txt --d filename!j!.txt
)