我正在尝试将迭代添加到文本文件中以保存输出编号,而不是覆盖它以保持迭代。
我能够写出第一个迭代号,但不会在之后添加数字。
我有一个只有迭代编号为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并且不会添加该数字。
答案 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.txt
对1
号码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的说明,以获取有关运算符&
的说明。