默认选择(批量)超时后不起作用
Default choice (in batch) not working after timeout
我创建了一个脚本来将文件复制到目录,但如果文件已经存在则会提示您。如果选择是,则此当前代码不会按预期工作,但文件已经存在,然后在第二个提示时没有输入。在 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
谁能告诉我为什么?我没有看到任何明显的冲突。
直接回答问题。 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
我创建了一个脚本来将文件复制到目录,但如果文件已经存在则会提示您。如果选择是,则此当前代码不会按预期工作,但文件已经存在,然后在第二个提示时没有输入。在 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
谁能告诉我为什么?我没有看到任何明显的冲突。
直接回答问题。 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