删除所有不具备特定文件类型的文件夹。 Windows脚本

时间:2014-05-19 18:12:39

标签: windows batch-file

我想要一个通过目录的Windows脚本,并删除其中不包含* .pdf或* .txt文件的所有文件夹。我该怎么做呢。

2 个答案:

答案 0 :(得分:2)

如果您要搜索的目录位于C:\驱动器上,则此代码可以执行以下操作:(将C:\更改为您要搜索的目录)

@echo off
del List2.txt
set usb=%cd%
dir "C:\" /a:d /b /s > List.txt
for /f "tokens=* delims=" %%x in (List.txt) do (
cd "%%x"
if not exist *.pdf echo %%x >> "%usb%\List2.txt"
if not exist *.txt echo %%x >> "%usb%\List2.txt"
)
cd "%usb%"
for /f "tokens=* delims=" %%y in (List2.txt) do rd "%%y"
exit

但这仅在所有文件夹都为空时才有效。如果您希望文件清空没有txt文件或pdf文件的文件夹,请将if not exist行更改为:

if not exist *.(pdf or txt) (
echo "%%x" >> "%usb%\List2.txt"
del "*.*"
)

将清空准备删除的文件夹。

简要说明

set usb=%cd%
这将变量usb定义为当前目录中的目录,以便稍后在程序中访问它。

dir "C:\" /a:d /b /s > List.txt

这会将C:\驱动器中的每个文件夹输出到列表中。它应该需要一些时间,因为C:\驱动器中通常有很多文件夹。通过将文件夹存储在列表中,可以稍后访问它们。

for /f "tokens=* delims=" %%x in (List.txt) do (
cd "%%x"
if not exist *.pdf echo %%x >> "%usb%\List2.txt"
if not exist *.txt echo %%x >> "%usb%\List2.txt"
)

这将检查文件中的所有行" List.txt"如果没有pdf文件或txt文件,它会在List2.txt中记录名称。

cd "%usb%"

这会将目录更改回原始目录。

for /f "tokens=* delims=" %%y in (List2.txt) do rd "%%y"

对于List2.txt中的每一行,它会删除记录的文件夹中没有pdf文件或txt文件。

希望这有帮助!

注意:经过测试

答案 1 :(得分:0)

@echo off
setlocal enabledelayedexpansion
set nocopyflag=0
for /f %%a in ('dir /b /s /ad') do (
 >nul 2>&1 dir /s "%%a\*.pdf" && set /a nocopyflag+=1
 >nul 2>&1 dir /s "%%a\*.txt  && set /a nocopyflag+=1
 if !nocopyflag! equ 0 (
  echo should be deleted: %%a
  REM rd /s /q %%a
 ) else (
  echo !nocopyflag! of the requested filetypes are present, do not delete: %%a
 )
) 
exit /b

检查输出是否正确,如果是,请在REM命令之前删除rd