批处理循环问题不会导致读取文档的第一行

批处理循环问题不会导致读取文档的第一行

我有以下脚本:

setlocal enabledelayedexpansion
set count=0
pause

for /f "tokens=*" %%i in ("%cd%\src\check.txt") do (
    set error[!count!]=%%i
    set /a count+=1
)

echo "%error[0]%"
pause

这给了我 check.txt 文件的路径,但它应该给我这个文档的第一行。如果我去掉路径中的“”,它就可以正常工作了。

问题是,如果文件夹路径中有空格,代码就会失败,这对我来说真的很烦人。

答案1

为什么不使用相对路径呢?

像这样:

setlocal enabledelayedexpansion
set count=0
pause

for /f "tokens=*" %%i in (.\src\check.txt) do (
    set error[!count!]=%%i
    set /a count+=1
)

echo "%error[0]%"
pause

答案2

您可以使用的输出find /counter根据文件中自己的行号来定义您的行:

@echo off & setlocal

for /f usebacktokens^=1*delims^=^[^] %%i in (`
   find /n /v "" ^<"%cd%\src\check.txt"`)do set "_error%%~i=%%~j"

echo; %_error1%
endlocal 

  • 观察:
:: setlocal enabledelayedexpansion // it is not necessary
:: set count=0                     // it is not necessary

其他资源:

答案3

如果我没记错的话你应该使用

set /a count=0

如果我理解正确的话,为什么你在进入循环之前不改变到正确的目录,例如。

pushd "c:\path\to\file"

for /f "tokens=*" %%i in (check.txt) do (
    set error[!count!]=%%i
    set /a count+=1
)

popd REM return from the directory

echo %error[0]%
echo %error[1]%

相关内容