【发布时间】:2018-12-26 01:56:28
【问题描述】:
我正在做作业。试图让我的批处理文件读取输入文件的各个行并找出它有多少个点和逗号。但是,无论我做什么,循环只运行一次,因此即使有多行,也只有文件的第一行被正确处理。我错过了什么?
REM @echo off
setlocal enabledelayedexpansion
set count=-2
for /F "delims=" %%I in (laba2.txt) DO (
set initial=%%I
set b = !initial!
:againdot
set oldb=!b!
set "b=!b:*.=!"
set /a count+=1
echo "b = !b!, oldb = !oldb!"
if not !oldb! == !b! goto :againdot
set b=!initial!
:againcomma
set oldb=!b!
set "b=!b:*,=!"
set /a count+=1
echo "b = !b!, oldb = !oldb!"
if not !oldb! == !b! goto :againcomma
)
echo %count%
当然,我读过其他类似的问题,但我不知道这些问题如何适用于我的问题,如果有重复,请见谅。
哦,如果你有更好的方法来计算单个字符,我会很高兴听到它,但这不是重点。
编辑:这里是 CMD 提要
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>test.bat
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>REM @echo off
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>setlocal enabledelayedexpansion
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set count=-2
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>for /F "delims=" %I in (laba2.txt) DO (
set initial=%I
set b = !initial!
set oldb=!b!
set "b=!b:*.=!"
set /a count+=1
echo "b = !b!, oldb = !oldb!"
if not !oldb! == !b! goto :againdot
set b=!initial!
set oldb=!b!
set "b=!b:*,=!"
set /a count+=1
echo "b = !b!, oldb = !oldb!"
if not !oldb! == !b! goto :againcomma
)
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>(
set initial=this,is .a random
set b = !initial!
set oldb=!b!
set "b=!b:*.=!"
set /a count+=1
echo "b = !b!, oldb = !oldb!"
if not !oldb! == !b! goto :againdot
set b=!initial!
set oldb=!b!
set "b=!b:*,=!"
set /a count+=1
echo "b = !b!, oldb = !oldb!"
if not !oldb! == !b! goto :againcomma
)
"b = *.=, oldb = "
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set oldb=!b!
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set "b=!b:*.=!"
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set /a count+=1
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>echo "b = !b!, oldb = !oldb!"
"b = =, oldb = *.="
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>if not !oldb! == !b! goto :againdot
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set oldb=!b!
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set "b=!b:*.=!"
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set /a count+=1
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>echo "b = !b!, oldb = !oldb!"
"b = =, oldb = ="
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>if not !oldb! == !b! goto :againdot
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set b=!initial!
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set oldb=!b!
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set "b=!b:*,=!"
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set /a count+=1
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>echo "b = !b!, oldb = !oldb!"
"b = is .a random, oldb = this,is .a random"
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>if not !oldb! == !b! goto :againcomma
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set oldb=!b!
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set "b=!b:*,=!"
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>set /a count+=1
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>echo "b = !b!, oldb = !oldb!"
"b = is .a random, oldb = is .a random"
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>if not !oldb! == !b! goto :againcomma
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>echo 3
3
C:\Users\fiksi\Desktop\Учёбка\ОС 3с\Лаба 2>
这是我要阅读的文件:
this,is .a random
..,arran,gement of.
commas and,
dots
【问题讨论】:
-
@echo on 实际上可能会向您显示问题。
-
我有我的回声。它什么也没说。无论如何我都无法破译。
-
您建议它有时会起作用。也许解释一下并展示你的研究和调试结果。
-
它“有时”不起作用,它仅适用于第一行。也许我不是很清楚,让我解决这个问题
-
您无法使用 FOR 命令进行跳转。
标签: windows file batch-file for-loop