批处理文件 - 如何从文件中复制文本,然后将其更新为新值

Batch File - How to copy text from file, and then update it to a new value

每次我打开批处理文件时,我希望它读取当前存储在文本文件中的信息,然后应用它提取的存储信息来计算一个新的整数。

我想弄清楚如何从文本文件中复制一个数字,将其存储为一个变量,然后更新为该文本文件中的一个新整数,比如将值加 1。 我一直在网上筛选资料,一切似乎都指向不同的方向。

这是我到目前为止挖掘得到的测试代码:

set file="Test.txt"
set /a _Counter =< %file%
echo:%_Counter%
set /a "_Update=%_Counter%+1"
echo:%_Update% >%file%
timeout /t 10

出于某种原因,当我尝试获取计数器的信息时,它没有从文本文件中提取任何数据,我只剩下批处理文件输出的这一行。

F:\Users\Test\Documents\JumbledDirectory> set /a _Counter = Directory\Test.txt 0<F:\Users\Test\Documents\Jumbled

我见过的最常见的答案是使用类似

的东西
set /p _Counter=< Test.txt  
echo %_Counter%

如此处所示:Windows batch command(s) to read first line from text file

但是在这样做之后我要么得到了

echo:%_Counter%

完全空白,或者每次都默认为0

任何帮助将不胜感激,因为我一直在努力寻找如何获得这个简单功能大约 6 个小时。

所以将批处理与文本文件放在同一目录中这将起作用:

REM get input of file as Counter
set /p Counter=<number.txt 

REM add a number to Counter and assign it as Counter
set /a "Counter=%Counter%+3

REM empty the file
break>number.txt

REM write Counter in the file
echo %Counter% >> number.txt
@ECHO Off
SETLOCAL
set "file=q72474185.txt"
set /p _Counter=< "%file%"
echo:%_Counter%
set /a _Update=_Counter+1

echo:%_Update% >"%file%"
TYPE "%file%"
GOTO :EOF

当您使用 point-click-and-giggle 方法执行批处理时,如果找到 syntax-error 或脚本 运行 完成,批处理 window 将关闭。您 可以 在语句后放置一个 pause 并返回错误,但最好从那里 open a 'command prompt' 和 运行 您的批次,以便 window 保持打开状态并显示任何(错误)消息。

错误消息是关于缺少操作数。

我更改了文件名,因为我使用自己的数据集跟踪我回答的每个问题。

使用 set "var=value" 设置字符串值 - 这避免了尾随 space 引起的问题。不要分配终端 \、Space 或 " - 从元素构建路径名 - 违反直觉,这可能会使过程更容易。

set /a 不期望来自任何地方的输入,它只是执行计算并分配结果。引号不是必需的,所以我删除了它们。 %set /a 中也不是必需的,但如果您使用 delayedexpansion.

则可能是必需的

set /p 需要输入,所以我用它来读取文件。请注意 set /a 忽略 spaces,但 setset /p 将在分配的变量名中的 = 之前包含 space,并且 _Counter & _Counter 是不同的变量。