好吧,之前我說明我的問題,讓我爲你提供一些背景:在一個文本文件遞增FOR循環的每一行(批)
我爲我的朋友創造一個短信服務,我對消息中的每個其他在學校。它的工作原理基本上是每個用戶啓動我放在他們電腦上的.bat文件。然後打開兩個窗口:一個輸入顯示「Text:」,另一個顯示另一個顯示每秒更新一次的文本文件的文件。當用戶輸入文本時,它會連接到文本文件。這是一部分的樣子:
:message
if %a%==1 (
echo %computername% has joined the chatroom at %time%! >> %place%chatroom.chatfile
set a=0
)
cls
echo.
echo.
set /p text="Text: "
if "%text%"=="quit" goto quit
if "%text%"=="clear" goto clear
if "%text%"=="restart" goto startup
goto tidyup
:send
echo %computername% at %time%: %text% >>%place%chatroom.chatfile
goto message
和更新文本文件的一部分:
:window
cls
type %place%chatroom.chatfile
TIMEOUT /T 1 /NOBREAK > nul
goto window
正如我一起感動,我意識到如果文本文件是超過20行左右,那麼你看不到底部。我嘗試使用more
命令來解決這個問題,但是這令人討厭地向下滾動,以至於你實際上無法讀取任何東西。
之後,我發現了一個非常好的解決方案:存儲一個名爲history.txt的單獨文件,並在原始文本文件的行數大於20的情況下將主文本文件的第一行移動到該文本文件的第一行
再次,我遇到了另一個問題:這隻能從文本文件中刪除一個行。假設原始文本文件長25行。我將如何移動這些線?
這是我到目前爲止有:
:tidyup
TIMEOUT /T 1 /NOBREAK > nul
set file=%place%chatroom.chatfile
set /a cnt=0
for /f %%a in ('type "%file%"^|find "" /v /c') do set /a cnt=%%a
set /p firstline=<%file%
if %cnt% GTR 20 (
set /a cnt2=%cnt%-20
for /l %%g in (1, 1, %cnt%) do (
echo %firstline%>>%place%history.chatfile ::pay attention to this line
)
for /f "skip=%cnt% delims=*" %%a in (%place%chatroom.chatfile) do (
echo %%a >>%place%chatroom2.chatfile
)
xcopy %place%chatroom2.chatfile %place%chatroom.chatfile /y >nul
del %place%chatroom2.chatfile /f /q)
goto send
,我放在::pay attention to this line
該生產線是我需要這個問題的回答:
如何遞增for
循環,使它的動作%CNT%到history.chatfile
OR
從原來的文本文件中的行量是否有一個更簡單的方式太一plish我在做什麼?即在批量
非常感謝!我只需要做一些小的調整就可以使它適合我的程序。 – ajc2000 2014-12-08 22:46:09