批处理文件 - 如何从文件中复制文本,然后将其更新为新值
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,但 set
和 set /p
将在分配的变量名中的 =
之前包含 space,并且 _Counter
& _Counter
是不同的变量。
每次我打开批处理文件时,我希望它读取当前存储在文本文件中的信息,然后应用它提取的存储信息来计算一个新的整数。
我想弄清楚如何从文本文件中复制一个数字,将其存储为一个变量,然后更新为该文本文件中的一个新整数,比如将值加 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,但 set
和 set /p
将在分配的变量名中的 =
之前包含 space,并且 _Counter
& _Counter
是不同的变量。