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.txt1
到目前为止,我的批处理代码是这样的
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%
是一个拼写错误?是的,是一个拼写错误,我可以让它工作。谢谢。请不要把你的问题改成一个正在编写的代码。它使你的问题(不再是问题)和任何答案无效。(已回滚)