Windows脚本删除图像文件扩展名以外的所有内容

时间:2014-09-05 20:54:43

标签: powershell batch-file

我想在Windows 7上创建一个脚本来删除非图片目录中的所有内容。 所以

    for all files in directory X

    if file y does not have extension in (.png, .gif, .jpeg)

    delete y

    end

就是这样

如何找到或创建这样的脚本

请注意,有些图片很重要,所以这个脚本必须正常工作:)我不认为我应该在这里进行实验,即使我在一个带有实验文件的小目录上测试我自己的脚本,我也不是我相信我应该尝试一下。

我建议使用此代码:

::extensions are delimited with space // filename is del_stuff.bat

set "extensions_list=.png .gif .jpeg .bmp .jpg "
pushd "C:\Users\denman\Desktop\xxx\"
for /f "delims=" %%f in ('dir /b ^|findstr /i /e /v "%extensions_list%" ') do (
        echo del /q /f "%%~f" 
)
popd

但是我收到了这个错误:

enter image description here

2 个答案:

答案 0 :(得分:2)

@echo off
::extensions are delimited with space
set "extensions_list=.png .gif .jpeg "
pushd "C:\Directory_with_pictures" && (
   for /f "delims=" %%f in ('dir /b /a-d ^|findstr /i /e /v "%extensions_list%" ') do (
        echo del /q /f "%%~f"
   )
  popd
)

'echo'用于验证结果。删除回声以激活删除。并使用实际路径更改"C:\Directory_with_pictures"

编辑测试脚本:

@echo off

md test_dir>nul 2>&1
echo #>test_dir\t1.png
echo #>test_dir\t1.txt
echo #>test_dir\t1.tst
echo #>test_dir\t1.jpg
echo #>test_dir\t1.gif

echo #>test_dir\t2.png
echo #>test_dir\t2.txt
echo #>test_dir\t2.tst
echo #>test_dir\t2.jpg
echo #>test_dir\t2.gif

echo -- before deleting--
dir /b .\test_dir\*
echo(
echo(

::extensions are delimited with space
set "extensions_list=.png .gif .jpeg .jpg"


pushd "test_dir"
for /f "delims=" %%f in ('dir /b ^|findstr /i /e /v "%extensions_list%" ') do (
        del /q /f "%%~f"
)
popd

echo -- after deleting --
dir /b .\test_dir\*

输出:

-- before deleting--
t1.gif
t1.jpg
t1.png
t1.tst
t1.txt
t2.gif
t2.jpg
t2.png
t2.tst
t2.txt


-- after deleting --
t1.gif
t1.jpg
t1.png
t2.gif
t2.jpg
t2.png

答案 1 :(得分:2)

使用Powershell,您可以获得所需的文件列表:

Get-ChildItem | where {!$_.PsIsContainer -and !(@(".png",".gif",".jpeg") -contains $_.Extension) }

我将Delete命令留给您,确保列表在您执行之前返回正确的结果。