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

标签 batch-file iteration

我正在尝试向文本文件添加迭代以保存输出数字,而不是覆盖它以保留迭代。
我可以编写第一个迭代编号,但它不会添加后面的数字。

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

迭代.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%

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

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

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

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

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

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

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

重定向运算符和文件名在此处指定给命令 ECHO,该命令输出数字,因为 echo %iter%>iteration.txt 不适用于 19 的数字。并且使用 echo %iter% >iteration.txt 也会将数字和重定向运算符 > 之间的空格字符作为尾随空格写入文件中,此处应避免这种情况。

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

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

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

关于batch-file - 将迭代添加到批处理文件中的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47742319/

相关文章:

c# - 如何在同时删除项目的同时遍历列表?

c++ - 为什么会出现访问冲突运行时错误?

windows - 模拟网络文件夹以在Powershell脚本中进行测试

java - 通过java运行批处理文件(.bat)所需的解决方案

java - 无法在 Windows 8.1 中运行 jflex.bat

mysql - Sequel Pro 中的循环和迭代入门

python - 希望遍历跳过特定索引的列表列表

batch-file - 批命令输入菜单

windows - 使用批处理文件附加到系统 PATH 变量值

c++ - 通过变量名遍历结构