我想要一个通过目录的Windows脚本,并删除其中不包含* .pdf或* .txt文件的所有文件夹。我该怎么做呢。
答案 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