转到不在批处理文件中工作,跳过用户输入



我正在开发一个备份Fallout 4 Saves的程序,因为这次使用控制台命令可以删除保存文件。不幸的是,当所有的部分都独立工作时,我制作的小菜单却不起作用!

由于某种原因,if%1m%==_goto_命令什么都不做,程序跳回标签1,这是我在无效输入的情况下设置的功能。

这里怎么了?

@echo off
title Fallout 4 Save Backup Utility
color 0a
:1
cls
setLocal EnableDelayedExpansion
pushd "C:FalloutBackupdata"
set /a count=0
for /d /r %%i in (*.*) do set /a count+=1
popd
echo %count% Backup(s^) currently exist.
echo.
echo.
set /a value=0
set /a sum=0
FOR /R %1 %%I IN (*) DO (
set /a value=%%~zI/1000000
set /a sum=!sum!+!value!
)
@echo Backups files using about: !sum! Mb
endlocal
echo.
echo.
echo Delete all but last backup? y/n?
set /p 1m=
if %1m% == y goto 3
if %1m% == Y goto 3
if %1m% == n goto 2
if %1m% == N goto 2
cls
goto 1

正如壁球手所说:
将变量1m更改为m1。CMD解释器不够聪明,无法知道您试图引用的是环境变量,而不是传递给批处理文件的参数。–

我还建议对"%m1%"=="y"使用引号。此外,IF之后的/I参数使答案不区分大小写,这是一个很大的优势。

另一个选项是使用CHOICE和ERRORLEVEL进行选项选择。相关代码更改为:

echo.
choice /c yn /m "Delete all but last backup? "
IF ERRORLEVEL 255 goto end
IF ERRORLEVEL 2 goto donotdelete
IF ERRORLEVEL 1 goto dodelete
IF ERRORLEVEL 0 goto end
goto begin

(255和0用于转义。)(您需要获得选择COM文件,该文件很容易获得。)

最新更新