Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file cmd中的for loop命令存在问题_Batch File - Fatal编程技术网

Batch file cmd中的for loop命令存在问题

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

我正在.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.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
)