批处理 - 用于运行SET命令的/ f循环

时间:2013-12-22 16:09:37

标签: batch-file

这是我的代码:

:LevelSave
cls & echo.Choose a save file: & echo.
if exist savedata.txt (
for /f "tokens=*" %%P in ('type savedata.txt') do (
%%P
set /a q=q+1
echo. [!q!] !savename! - !lastcd!
set r=!r!!q!
)
)

这是savedata.txt的内容

set savename=save1 && set lastcd=start\Continue on path

但是在运行时,它会输出:

Choose a save file:

save1 && set lastcd=start\Continue on path - save1

即使我删除了echo

我尝试在savedata.txt中使用不同的引号排列,但我认为问题实际上在for命令中。你知道我做错了吗?

3 个答案:

答案 0 :(得分:1)

只需在call

中的set之前加savedata.txt

savedata.txt:

call set savename=save1 && call set lastcd=start\Continue on path

答案 1 :(得分:1)

这是一种解决方法:

savedata.txt

save1|start\Continue on path
save2|end\fallen into the pit

@echo off
setlocal enabledelayedexpansion
:LevelSave
cls & echo.Choose a save file: & echo.
if exist savedata.txt (
for /f "tokens=1,* delims=|" %%P in ('type savedata.txt') do (
set savename=%%P
set lastcd=%%Q
set /a q=q+1
echo. [!q!] !savename! - !lastcd!
set r=!r!!q!
)
)
pause

答案 2 :(得分:1)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
:LevelSave
cls & echo.Choose a save file: & echo.
SET savename=some name&SET lastcd=somelastcd&SET q=6
::@ECHO on
if exist q20731333.txt (
for /f "tokens=*" %%P in ('type q20731333.txt') do (
CALL :sub "%%P"
set /a q=q+1
echo. [!q!] !savename! - !lastcd!
set r=!r!!q!
)
)
GOTO :EOF

:sub
%~1
GOTO :eof

这应该有用......我已经更改了测试的文件名...以及实例化的变量名。