有其中包含了一些隨機文件的文件夾:批處理腳本刪除的.exe選擇
file1.txt
file2.exe
file3.cpp
file4.exe
如何只顯示與數字連這樣的exe文件:
1. file2.exe
2. file4.exe
然後我進入該文件的編號,我想刪除..如果它甚至可以做到這一點..
有其中包含了一些隨機文件的文件夾:批處理腳本刪除的.exe選擇
file1.txt
file2.exe
file3.cpp
file4.exe
如何只顯示與數字連這樣的exe文件:
1. file2.exe
2. file4.exe
然後我進入該文件的編號,我想刪除..如果它甚至可以做到這一點..
我可以想出最短的防彈解決方案。與Anders類似,DEL語句由ECHO命令禁用。刪除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條件附加到輸入驗證以處理無效輸入。
代碼的幾個微妙點:
!
的名稱。:
是一個安全的分隔符,因爲文件名不能包含:
。<Enter>
而沒有輸入任何東西,則SET/P將保留現有值。不完全漂亮,但它得到了工作完成
@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"
)
)
)
'idx'應在SET/P之前清除。您的輸入驗證不會進行字符串比較,而是進行數字比較,因此具有5個條目的菜單會錯誤地接受條目11.刪除引號會使比較爲數字,但您不受字母字符保護 - 將接受1a的條目。 – dbenham 2012-03-25 14:34:30
@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%]!
它會成爲第一個作爲Windows批處理腳本編寫的文件管理器嗎? :) – 2012-03-25 02:25:16