使脚本读取文本文件并在添加新行时更新

时间:2016-11-08 03:48:41

标签: batch-file text

这是我到目前为止所拥有的:

@ECHO OFF
SetLocal EnableDelayedExpansion
:loop
set vara = 0
set varb = 0
if NOT %vara% == %varb% (
for /f "delims=" %%x in ('type Chat.txt') do ( 
    set /a %vara%=%vara%+1
    set "Var=%%x"
    ECHO !Var!
)
set %varb=%vara%
)
goto loop
pause

但是当它打开时它会立即崩溃,有什么帮助吗? 编辑: 现在我有了

@ECHO OFF
SetLocal EnableDelayedExpansion
title NOOOOPPPEEEE
set varb=5
:loop
set vara=0
for /f "delims=" %%x in ('type Chat.txt') do ( 
    set /a vara=vara+1
echo %vara%
)
echo %vara%
echo %varb%
pause
if NOT %vara% == %varb% (
cls
for /f "delims=" %%x in ('type Chat.txt') do ( 
    set %varb%=%vara%
    set "Var=%%x"
    ECHO !Var!  
)
echo %varb%
)
goto loop
pause

但它不会将varb更改为vara(在这种情况下,我使用的文件为3)

1 个答案:

答案 0 :(得分:0)

遇到vara时,varbif都未设置。

使用标准set命令,=两侧的空格很重要,因此您的命令将“vara space ”设置为“ space 0"

您可以使用set /a进行数字分配,其中会忽略空格。

由于两个变量都没有设置,if命令变为

if == (

所以cmd会产生有关问题的错误消息。

由于您显然是通过点击快捷方式运行,cmd然后关闭,您什么都看不见。

通常假设您正在开发cmd脚本,那么您正在从命令提示符运行。您可以通过查找“命令提示符”(在“所有程序>附件”下,如果我的记忆为我服务)和SEND将其添加到桌面来执行此操作。如果单击该新快捷方式,您将获得一个黑屏,其中开发更简单。

BTW,

set %varb=%vara%

及其在脚本中使用的变体将名为“({strong>内容的varb)”的变量设置为... - 它不会设置“varb”

AND 在解析最外层代码块时解析任何%var%,因此当时vara = 0遇到if,然后

set /a %vara%=%vara%+1

将尝试在内循环中每时间将变量“0”设置为(0 + 1)的值

有关“delayedexpansion”的更多内容,请参阅无穷无尽的SO项目。