求一个批处理文件,较难,新手退散!灌水滚蛋!

来源:百度知道 编辑:UC知道 时间:2024/05/23 10:41:23
事情是这样的,在H:\xampp\htdocs\thesoft\里有很多个文件夹,如

H:\xampp\htdocs\thesoft\z_091\
H:\xampp\htdocs\thesoft\z_092\
H:\xampp\htdocs\thesoft\z_093\
……

在每个文件夹里大约有120个子文件夹,每个子文件夹里有一个文件,如

H:\xampp\htdocs\thesoft\z_091\3218\winrar.exe
H:\xampp\htdocs\thesoft\z_091\62142\setup07.rar
H:\xampp\htdocs\thesoft\z_091\123\mjufe.zip
……

H:\xampp\htdocs\thesoft\z_092\0817\234.rar
H:\xampp\htdocs\thesoft\z_092\8251\fege.rar
H:\xampp\htdocs\thesoft\z_092\5243\nb.iso
……

按理来说,每个子文件夹里都应该是一个文件,但由于发生了某些意外,有的文件夹里有2个,3个文件,我现在想做的就是利用一个批处理文件遍历所有子文件夹,如果子文件夹里超过了一个文件,则自动保留第一个文件,其余的全部删掉。

============================================================

注意:没思路的不要瞎跟帖灌水,贴吧总有些灌水混分的,乱推荐
软件的,啥也不是

每个文件夹里的文件夹,按文件名长度,知道了.
不过,批处理的话,你必须保证文件名不含%号和!号.
(测试成功!)

@echo off
setlocal enabledelayedexpansion
call:main
endlocal
pause>con
goto :eof

:main
set "folder=H:\xampp\htdocs\thesoft"
for /f "delims=" %%i in ('dir /a:d /b "!folder!"') do (
for /f "delims=" %%j in ('dir /a:d /b "!folder!\%%i"') do (
call:wenjian "!folder!\%%i\%%j"
)
)
exit /b

:wenjian
set "long.name="
set "long.length=0"
for /f "delims=" %%i in ('dir /a:-d /b /s "%~1"') do (
set "current.name=%%i"
call:length "%%~nxi"
set "current.length=!errorlevel!"
if not !current.length! gtr !long.length! (
del /f /a "!current.name!"
) else (
if not "!long.name!"=="" del /f /