有一个包含一些随机文件的文件夹:
file1.txt
file2.exe
file3.cpp
file4.exe
如何SIMPLY显示与这样的数字连接的exe文件:
1. file2.exe
2. file4.exe
然后我输入要删除的文件编号..如果甚至可以这样做......
答案 0 :(得分:2)
不完全漂亮,但它完成了工作
@echo off
setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
goto main
:addit
set /A end=end + 1
set %end%=%~1
echo %end%. %~1
goto :EOF
:main
set end=0
for %%A in ("*.exe") do (
call :addit "%%~A"
)
if "%end%"=="0" goto :EOF
echo.&set idx=
set /P idx=Delete (1...%end%)
if not "%idx"=="" if %idx% GEQ 1 if %idx% LEQ %end% (
for /F "tokens=1,* delims==" %%A in ('set %idx% 2^>nul') do (
if "%idx%"=="%%~A" (
echo.Deleting %%~B...
rem del "%%~B"
)
)
)
答案 1 :(得分:2)
@echo off
setlocal EnableDelayedExpansion
set i=0
for %%f in (*.exe) do (
set /A i+=1
set file[!i!]=%%f
echo !i!. %%f
)
set i=0
set /P i=File to delete:
del !file[%i%]!
答案 2 :(得分:2)
我能想到的最短防弹解决方案。与Anders一样,ECHO命令禁用DEL语句。删除ECHO以使菜单正常运行。
@echo off
setlocal disableDelayedExpansion
for /f "delims==" %%A in ('set menu 2^>nul') do set "%%A="
for /f "tokens=1* delims=:" %%A in ('dir /b *.exe 2^>nul ^| findstr /n "^"') do (
set menu%%A=%%B
echo %%A. %%B
)
if not defined menu1 exit /b
set "delNum="
set /p "delNum=Delete which file (enter the number): "
setlocal enableDelayedExpansion
if defined menu!delNum! echo del "!menu%delNum%!"
我能想到的唯一可能出错的是,如果条目太多,菜单的一部分可能会滚动屏幕。
可以轻松合并其他消息。并且ELSE条件可以附加到输入验证以处理无效输入。
代码的一些细微之处:
!
的名称。:
是一个安全的FOR分隔符,因为文件名不能包含:
。<Enter>
而没有输入任何内容,SET / P将保留现有值。