我目前正在寻找实现一个小脚本来浏览目录并删除所有文件/文件夹后,在这种情况下使用3
这是我试图实现的一个例子
c:/ test包含
我对批处理脚本不是很熟悉,但相信这个过程需要 a for iteration,为目录中的每个文件(任何类型)的count变量加1,当计数达到3时,它将开始删除该点之后的文件。有人可以请求帮助我可以用Java编写基本进程,但对批处理脚本略有不熟悉。有人可以帮忙吗?
由于
答案 0 :(得分:1)
不需要计数器
@echo off
setlocal enableextensions disabledelayedexpansion
rem How many elements to keep
set "keep=3"
rem Retrieve folder from batch arguments
set "folder=%~1"
rem If no folder indicated, use current active directory
if not defined folder for %%a in (.) do set "folder=%%~fa"
rem Ensure we are working in the correct folder
pushd "%folder%" && (
rem For each element in the folder, skipping the first n
for /f "skip=%keep% delims=" %%a in (' dir /b /on ') do (
rem If it is a folder, use rmdir, else use del
if exist "%%a\" ( echo rmdir /s /q "%%a" ) else ( echo del "%%a" )
)
rem Work done. Return to previous active directory
popd
) || (
rem Folder change failed
echo Target folder does no exist
)
文件/文件夹删除操作仅回显给控制台。如果输出正确,请删除echo
和rmdir
del
命令
答案 1 :(得分:0)
未测试。更改文件开头的目录,数字等变量。确定删除最后一行的echo
@echo off
set "start_deleting_from=4"
set "directory=c:\bak_files"
set "extension=.bak"
set counter=0
pushd "%directory%"
setlocal enableDelayedExpansion
for %%# in (%extension%) do (
set /a counter=counter+1
if !counter! GEQ !start_deleting_from! (
rem delete "echo" if to activate deletion
echo del /q /f file!counter!!extension!
)
)
答案 2 :(得分:0)
因此,如果要求“按字母顺序排序,请保留文件夹中*.bak
个文件的前三个并删除其余文件,批处理文件将为:
@echo off
setlocal EnableDelayedExpansion
pushd C:\test
set top=3
set filespec=*.bak
set counter=0
for /f "delims=" %%f in ('dir /b %filespec%') do (
set /a counter+=1
if !counter! GTR %top% del /q "%%f"
)
您可以使用dir
命令的各种选项来实现不同的顺序或选择不同的文件。
您也可以使用命令行参数来配置脚本。假设你像这样调用脚本:
delete_after.bat 3 *.bak
然后3
和*.bak
在批处理文件中分别作为%1
和%2
提供。您可以使用它来摆脱硬编码值。