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

时间:2015-11-25 18:18:04

标签: batch-file cmd

我正在开发一个程序来备份Fallout 4保存,因为这次使用控制台命令可能会出现一个保存文件。不幸的是,虽然所有部分都是独立工作的,但我所做的小菜单并不起作用!

由于某种原因if if%1m%== _ goto _命令什么都不做,程序会跳回到标签1,这是我在输入无效时放入的一个功能。

这里有什么问题?

@echo off
title Fallout 4 Save Backup Utility
color 0a

:1
cls
setLocal EnableDelayedExpansion
pushd "C:\FalloutBackup\data\"
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

2 个答案:

答案 0 :(得分:1)

作为壁球人说:
将变量1m更改为m1。 CMD解释器不够智能,不知道您正在尝试引用环境变量而不是传递给批处理文件的参数。 -

我还建议使用“%m1%”==“y”的引号。此外,IF之后的/ I参数使得答案不是上限敏感的,这是一个很大的优点。

答案 1 :(得分:0)

另一种选择是使用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文件。)