2013-12-22 17 views
0

這是我的代碼:批 - FOR/F循環運行一組命令

: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命令中的某個地方。你知道我做錯了什麼嗎?

+0

你可以檢查你是否運行正確的文件,如果savedata.txt存儲在你運行它的目錄中嗎?添加一些echo語句以查看腳本的哪部分被執行,哪些不是。 – wimh

回答

1

只要把call前2 setsavedata.txt

savedata.txt:

call set savename=save1 && call set lastcd=start\Continue on path 
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 
+0

有沒有辦法用savedata.txt中的更多變量來做到這一點?例如。 savename | save1 lastcd | blah ... var3 | blah var4 | blah ...等無限多的變量? – programjm

+0

無限 - 無。然而你可以有更多的物品。安排保存遊戲數據的常用方法是將信息寫入一系列單獨的行中,然後將它們讀入數組或一系列變量中以恢復它們。 – foxidrive

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 

這應該工作...我已經改變了文件名我的測試...和實例variablenames。