超时后默认选择(批量)不起作用

问题描述 投票:0回答:1

我已经创建了一个脚本来将文件复制到目录,但是会提示您文件是否已存在。如果选择“是”,则此当前代码将无法正常工作,但是该文件已存在,因此在第二个提示符下没有输入。在exist部分中的含义是,当超时时间结束时,它不会默认为no选项。

:: This is a script to move downloaded files into a folder titled with todays date
@echo ---------------------------------
@echo ARE YOU SURE YOU WANT TO PROCEED?
@echo ---------------------------------
@echo off 
::present user with Yes/No option
choice /C YN /M "Press Y for Yes, N for No." /T 10 /D N
if "%errorlevel%"=="1" goto:yes
if "%errorlevel%"=="2" goto:no

:yes
if exist "%date:/=_%\cE0MB.m4a" (
goto EXIST
) else (goto MOVE)
:MOVE
if exist cE0MB.m4a (
md "%date:/=_%"
move cE0MB.m4a "%date:/=_%\cE0MB.m4a"
) else (echo FILES NOT DOWNLOADED, PLEASE DOWNLOAD THEN RUN SCRIPT AGAIN)
if exist "%date:/=_%\cE0MB.m4a" echo FILE SUCCESSFULLY COPIED TO DIRECTORY
TIMEOUT /T  5 >nul
exit

:EXIST
if exist cE0MB.m4a (
choice /C YN /M "Files already exist, overwrite?" /T 5 /D N
if "%errorlevel%"=="1" goto:move
if "%errorlevel%"=="2" goto:no
) else (echo NOTHING TO COPY, CLOSING...)
TIMEOUT /T  3 >nul
exit 

:no
echo YOU HAVE SELECTED NO OR WAITED TOO LONG TO RESPOND
echo PRESS ANY KEY OR WAIT TO EXIT
TIMEOUT /T  5 >nul
exit 

但是,如果我将exist部分修改为以下内容,则它将按预期工作

:EXIST
if exist cE0MB.m4a (
choice /C NY /M "Files already exist, overwrite?" /T 5 /D N
if "%errorlevel%"=="1" goto:no
if "%errorlevel%"=="2" goto:move
) else (echo NOTHING TO COPY, CLOSING...)
TIMEOUT /T  3 >nul
exit 

有人可以告诉我为什么吗?我看不到任何明显的冲突。

batch-file cmd command-prompt
1个回答
2
投票

直接回答问题。 choice根据选择的位置设置一个值,因为在代码块内部设置值需要delayedexpansion,因此在代码块内部运行选择时需要执行相同的操作。当前,当您使用先前定义的errorlevel输入代码块时,它将在循环内保持1。只需这样做:

:EXIST
if exist cE0MB.m4a (
   setlocal enabledelayedexpansion
   choice /C YN /M "Files already exist, overwrite?" /T 5 /D N
   if "!errorlevel!"=="1" goto:move
   if "!errorlevel!"=="2" goto:no
   endlocal
) else (
   echo NOTHING TO COPY, CLOSING...
)
TIMEOUT /T 3 >nul
© www.soinside.com 2019 - 2024. All rights reserved.