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 向批处理文件中的文本文件添加迭代_Batch File_Iteration - Fatal编程技术网

Batch file 向批处理文件中的文本文件添加迭代

Batch file 向批处理文件中的文本文件添加迭代,batch-file,iteration,Batch File,Iteration,我正在尝试将迭代添加到文本文件以保存输出编号,而不是将其覆盖以保持迭代。 我能够写出第一个迭代编号,但它不会在之后添加编号 我有一个文本文件,其迭代编号为1 iteration.txt 1 到目前为止,我的批处理代码是这样的 REM Run model outputs set "iter=" for /F "delims=" %%i in (iteration.txt) do if not defined iter set "iter=%%i" copy .\run1_Diagnostics.

我正在尝试将迭代添加到文本文件以保存输出编号,而不是将其覆盖以保持迭代。
我能够写出第一个迭代编号,但它不会在之后添加编号

我有一个文本文件,其迭代编号为
1

iteration.txt
1

到目前为止,我的批处理代码是这样的

REM Run model outputs

set "iter="
for /F "delims=" %%i in (iteration.txt) do if not defined iter set "iter=%%i"
copy .\run1_Diagnostics.csv storefilesfolder\%itera%_Diagnostics.csv

echo %iter%+1 >iteration.txt

问题是它只是将文本文件改写为+1或+1+1+1+1,而不添加数字。

我建议使用以下代码:

REM Run model outputs

if not exist iteration.txt set "iter=1" & goto CopyFile

set "iter="
for /F "delims=" %%i in (iteration.txt) do if not defined iter set "iter=%%i"
set /A iter+=1

:CopyFile
copy run1_Diagnostics.csv storefilesfolder\%iter%_Diagnostics.csv
>iteration.txt echo %iter%
还有另一种方法可以读取文本文件的第一行并将其分配给环境变量:

REM Run model outputs

if not exist iteration.txt set "iter=1" & goto CopyFile

set "iter="
set /P iter=<iteration.txt
set /A iter+=1

:CopyFile
echo copy run1_Diagnostics.csv storefilesfolder\%iter%_Diagnostics.csv
>iteration.txt echo %iter%
REM运行模型输出
如果不存在iteration.txt,则设置“iter=1”&转到CopyFile
设置“iter=”
set/P iter=iteration.txt echo%iter%
两个批处理文件首先检查当前目录中是否存在文件
iteration.txt

如果文件不存在,则使用值
1
定义环境变量
iter

否则,将从文件中读取第一行,并使用命令FOR将其分配给环境变量
iter
,或者在提示使用命令SET和选项
/p
输入环境变量值时,从文件中重定向输入

使用带有选项
/A
的命令SET将从文件读取的值递增一,这意味着环境变量
iter
的新值是算术表达式的结果
set/A
是Windows命令行解释器支持的对32位有符号整数值执行简单数学或二进制操作的唯一方法。如果从文件读取的字符串不是有效的32位有符号整数,
iter
的值为
1

接下来,使用初始值
1
或从文件
iteration.txt
读取的值递增1来复制文件

\
并不是指定当前目录所必需的。如果文件或文件夹位于当前目录中,则可以安全地省略这两个字符

最后一个命令行输出当前迭代值以处理STDOUT,该值被重定向到正在创建或覆盖的文件(如果已经存在)

重定向运算符和文件名在此处被指定为左至命令ECHO,该命令输出数字,因为
ECHO%iter%>iteration.txt
不适用于编号
1
9
。并使用
echo%iter%>iteration.txt
将数字和重定向运算符之间的空格字符
也作为尾随空格写入文件,此处应避免使用

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 复制/?
  • echo/?
  • 获取/?
  • goto/?
  • 如果/?
  • rem/?
  • 设置/?

另请阅读Microsoft关于的文章,了解重定向运算符
的说明,以及运算符
&

的说明batch不是真正的程序语言。没有什么比得上
%var%+1
做数学计算的唯一方法是。你必须先用
set/a iter+=1
进行计算,然后再使用
echo%iter
。我想
%itera%
是一个拼写错误?是的,是一个拼写错误,我可以让它工作。谢谢。请不要把你的问题改成一个正在编写的代码。它使你的问题(不再是问题)和任何答案无效。(已回滚)