我想在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
但是我收到了这个错误:
答案 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命令留给您,确保列表在您执行之前返回正确的结果。