我有以下脚本:
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]%