Cmd I';I’我想删除文件夹中具有特定扩展名且与指定字符串不匹配的一组文件

Cmd I';I’我想删除文件夹中具有特定扩展名且与指定字符串不匹配的一组文件,cmd,batch-processing,Cmd,Batch Processing,我不熟悉命令提示符脚本和批处理文件。我有一个包含以下内容的文件夹: file1.pdf file1.tif 文件1_cropped.tif file1.txt file2.pdf 文件2.tif 文件2_cropped.tif 文件2.txt filen.pdf filen.tif filen_cropped.tif filen.txt 我想删除文件名中没有“_裁剪”的所有tif文件。我已经看到了一些用于删除具有指定扩展名或与特定字符串匹配的文件的解决方案,但我正在尝试将两者结合起来 非常感

我不熟悉命令提示符脚本和批处理文件。我有一个包含以下内容的文件夹:

  • file1.pdf
  • file1.tif
  • 文件1_cropped.tif
  • file1.txt
  • file2.pdf
  • 文件2.tif
  • 文件2_cropped.tif
  • 文件2.txt
  • filen.pdf
  • filen.tif
  • filen_cropped.tif
  • filen.txt
我想删除文件名中没有“_裁剪”的所有tif文件。我已经看到了一些用于删除具有指定扩展名或与特定字符串匹配的文件的解决方案,但我正在尝试将两者结合起来

非常感谢

马克

应该合适

也许你会想要

pushd "target directoryname"
for /f "delim...
popd
指定要处理的当前目录以外的目录


所需的DEL命令仅用于测试目的验证命令是否正确后,将
ECHO DEL
更改为
DEL
,以实际删除文件。

从命令行,在目标目录中:

for /F "eol=: delims=" %a in ('dir /b *.tif ^| find /V "_cropped"') do @del "%a"
我们有:

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
在批处理文件中:

for /F "eol=: delims=" %%a in ('dir /b *.tif ^| find /V "_cropped"') do @del "%%a"

我们使用更具互动性的方法进行确认的示例:

通常用作:

the_bat_file.bat exclude_these tif
其中选项一是要排除的文件名中的字符串,选项二是文件扩展名

@echo off

set pat=_cropped
set ext=tif

IF "%1"=="--help"  (
    echo Usage %0 [exclude] [extension]
    echo   Default exclude  : %pat%
    echo   Default extension: %ext%
    goto end
)

GOTO part1

:confirm
SET /P CONF=Continue y/N?
IF /I "%CONF%" NEQ "Y" GOTO end
goto %con%

:part1
setlocal

IF NOT "%1"=="" set pat=%1
IF NOT "%2"=="" set ext=%2

echo Pattern  : %pat% 
echo Extension: %ext%
echo.

set con=part2
goto confirm

:part2
echo.
echo Files to delete:
echo.
for /F "eol=: delims=" %%a in ('dir /b "*.%ext%" ^| find /V "%pat%"') do echo "%%a"
echo.
set con=part3
goto confirm

:part3
for /F "eol=: delims=" %%a in ('dir /b "*.%ext%" ^| find /V "%pat%"') do DEL "%%a"

:end
endlocal

需要明确的是:您是想从命令行还是在批处理脚本中执行此操作?批处理脚本更可取,但如果您能够同时显示这两种脚本的示例,那将非常有帮助。非常感谢您给出了非常棒的答案。@laxman:不客气。我每天都使用Linux,很久没有做任何与批处理相关的事情了。追上去很有趣,而且有点忘乎所以;)谢谢你的回答。
@echo off

set pat=_cropped
set ext=tif

IF "%1"=="--help"  (
    echo Usage %0 [exclude] [extension]
    echo   Default exclude  : %pat%
    echo   Default extension: %ext%
    goto end
)

GOTO part1

:confirm
SET /P CONF=Continue y/N?
IF /I "%CONF%" NEQ "Y" GOTO end
goto %con%

:part1
setlocal

IF NOT "%1"=="" set pat=%1
IF NOT "%2"=="" set ext=%2

echo Pattern  : %pat% 
echo Extension: %ext%
echo.

set con=part2
goto confirm

:part2
echo.
echo Files to delete:
echo.
for /F "eol=: delims=" %%a in ('dir /b "*.%ext%" ^| find /V "%pat%"') do echo "%%a"
echo.
set con=part3
goto confirm

:part3
for /F "eol=: delims=" %%a in ('dir /b "*.%ext%" ^| find /V "%pat%"') do DEL "%%a"

:end
endlocal