将迭代添加到批处理文件中的文本文件

时间:2017-12-10 18:54:50

标签: 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.csv storefilesfolder\%itera%_Diagnostics.csv

echo %iter%+1 >iteration.txt

问题是它只是将文本文件覆盖为+1或+1 +1 +1 +1并且不会添加该数字。

1 个答案:

答案 0 :(得分: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%

两个批处理文件首先检查当前目录中是否存在文件iteration.txt

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

否则,从文件中读取第一行,并使用命令 FOR 将其分配给环境变量iter,或者使用命令 SET ,带有选项/P

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

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

.\并不一定需要指定当前目录。如果文件或文件夹在当前目录中,则可以安全地省略这两个字符。

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

此处指定重定向运算符和文件名左侧命令 ECHO ,由于echo %iter%>iteration.txt1号码9不起作用,因此输出该号码}}。并且使用echo %iter% >iteration.txt将数字和重定向运算符>之间的空格字符也写入文件作为尾随空格,这里应该避免使用。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • copy /?
  • echo /?
  • for /?
  • goto /?
  • if /?
  • rem /?
  • set /?

另请阅读Microsoft有关Using Command Redirection Operators的文章,了解有关重定向运算符<以及>single line with multiple commands using Windows batch file的说明,以获取有关运算符&的说明。

相关问题