我一直在 Windows 7 中处理这个简单的批处理,它设置了一个驱动器号以删除其中的所有文件和文件夹。如果驱动器未安装,它应该提示用户输入一个,如下所示:
@echo off
set folder="t:\"
IF EXIST "%folder%" (
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)ELSE (@echo this drive is not mounted, please enter a new one.
set /p drive=
cd /d %drive%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
@pause)
至于IF EXIST
部分,它运行完美,但是当驱动器未安装时,一旦输入新的驱动器号,它就不会工作。有什么想法吗?提前谢谢。
答案1
当驱动器未安装时,一旦输入新的驱动器号,它将不起作用
你需要enabledelayedexpansion
:
添加
setlocal enabledelayedexpansion
到批处理文件的开头并替换%drive%
为!drive!
更正的批处理文件:
@echo off
setlocal enabledelayedexpansion
set folder="t:\"
IF EXIST "%folder%" (
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (
rmdir "%%i" /s/q || del "%%i" /s/q
)
) ELSE (
@echo this drive is not mounted, please enter a new one.
set /p drive=
cd /d !drive!
pause
for /F "delims=" %%i in ('dir /b') do (
rmdir "%%i" /s/q || del "%%i" /s/q
)
)
@pause
endlocal
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。