我想要遍历字符串中的每个字符。然而,我只知道如何使用以下代码遍历字符串中的每个单词:
(set /P MYTEXT=)<C:\MYTEXTFILE.txt
set MYEXAMPLE=%MYTEXT%
for %%x in (%MYEXAMPLE%) do (
ECHO DO SOMTHING
)
如何将其配置为按字符而不是按单词工作?
我想要遍历字符串中的每个字符。然而,我只知道如何使用以下代码遍历字符串中的每个单词:
(set /P MYTEXT=)<C:\MYTEXTFILE.txt
set MYEXAMPLE=%MYTEXT%
for %%x in (%MYEXAMPLE%) do (
ECHO DO SOMTHING
)
for循环可以用来实现:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set /P mytext= < MYTEXTFILE.txt
echo Line is '%mytext%'
set pos=0
:NextChar
echo Char %pos% is '!mytext:~%pos%,1!'
set /a pos=pos+1
if "!mytext:~%pos%,1!" NEQ "" goto NextChar
FOR
不能进行逐字符迭代 - 一种可能的解决方法是构建以下循环:@ECHO OFF
:: string terminator: chose something that won't show up in the input file
SET strterm=___ENDOFSTRING___
:: read first line of input file
SET /P mytext=<C:\MYTEXTFILE.txt
:: add string terminator to input
SET tmp=%mytext%%strterm%
:loop
:: get first character from input
SET char=%tmp:~0,1%
:: remove first character from input
SET tmp=%tmp:~1%
:: do something with %char%, e.g. simply print it out
ECHO char: %char%
:: repeat until only the string terminator is left
IF NOT "%tmp%" == "%strterm%" GOTO loop
注意:问题标题表明您想循环遍历“变量字符串中的每个字符”,这表明输入文件只包含一行内容,因为命令(set /P MYTEXT=)<C:\MYTEXTFILE.txt
仅会读取C:\MYTEXTFILE.txt
的第一行。如果您想要遍历文件中的所有行,则解决方案会更加复杂,我建议您另外提出一个问题来询问。
splitStr
子程序的说明:
goto
循环errorLevel
设为字符串中字符的数量@echo off & setLocal enableExtensions disableDelayedExpansion
(call;) %= sets errorLevel to 0 =%
set "testStr=uncopyrightable"
call :splitStr testStr
if errorLevel 1 (
>&2 echo(string is %errorLevel% char(s^) in length
) else (
>&2 echo(empty string
goto die
) %= if =%
goto end
:die
(call) %= sets errorLevel to 1 =%
:end
endLocal & goto :EOF
:splitStr string=
:: outputs string one character per line
setLocal disableDelayedExpansion
set "var=%1"
set "chrCount=0" & if defined var for /f "delims=" %%A in ('
cmd /v:on /q /c for /l %%I in (0 1 8190^) do ^
if "!%var%:~%%I,1!" neq "" (^
echo(:^!%var%:~%%I^,1^!^) else exit 0
') do (
set /a chrCount+=1
echo%%A
) %= for /f =%
endLocal & exit /b %chrCount%
setlocal enabledelayed expansion
,否则下一个注释将是“不起作用”;)
(并且请务必删除mytext
和=
之间的空格) - Stephancmd
中空格确实会产生影响(set var = value
会将变量%var<space>%
设置为<space>value
)。你使用什么系统(扩展)? - Stephan