使用.bat删除除一个特定名称的文件以外的所有文件夹和文件

时间:2018-09-13 10:50:25

标签: windows powershell batch-file

我在.bat文件中使用了以下代码,以便删除除“ parcel.dwg”之外的“ AutoCAD_Temp”中的所有文件和文件夹,但这对我不起作用。

    @echo
set exclude=/Parcel.dwg/
for %%a in (C:\inetpub\Temp_FME\AutoCAD_Temp) do (

   if "!exclude:/%%~a/=!" equ "%exclude%" 
   (
      echo "Deleting" %%~a  
      del "%%~a"
   )
)

文件夹路径:C:\inetpub\Temp_FME\AutoCAD_Temp

enter image description here

这里可能是什么问题?

我们将不胜感激,

卢布纳

3 个答案:

答案 0 :(得分:1)

如果只有一个文件要保护,那么您所需要做的就是将其锁定

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem Just to avoid having to retype paths, place info on variables
    set "folder=C:\inetpub\Temp_FME\AutoCAD_Temp"
    set "excluded=Parcel.dwg"

    rem If the excluded file exist, we will need to lock it. 
    if exist "%folder%\%excluded%" ( set lock= ^< "%excluded%" ) else ( set "lock=" )

    rem Change to requested folder, remove anything not locked and return
    pushd "%folder%" && (
        rmdir . /s /q %lock% 2>nul 
        popd 
    )

检查文件存在的原因是避免尝试锁定不存在的文件,这会使命令失败,因此,lock变量(保留最终命令的一部分,该部分将锁定文件以供读取。 )仅在文件存在时定义。

答案 1 :(得分:0)

使用findstr使用/v

从搜索中排除文件
@echo off
for /f "delims=" %a in ('dir /b "C:\inetpub\Temp_FME\AutoCAD_Temp" ^| findstr /vi "Parcel.dwg"') do (
  echo "Deleting" %%~a  
  echo del "%%~a"
)

如果您想预定义变量,只需:

@echo off
set "mypath=C:\inetpub\Temp_FME\AutoCAD_Temp"
set "exclude=Parcel.dwg"
for /f "delims=" %a in ('dir /b "%mypath%" ^| findstr /vi "%exclude%"') do (
  echo "Deleting" %%~a  
  echo del "%%~a"
)

答案 2 :(得分:0)

这是PowerShell中的一行,供您考虑:

Get-ChildItem C:\inetpub\Temp_FME\AutoCAD_Temp\* -File -Exclude Parcel.dwg | Remove-Item -WhatIf

(如果输出正确,请删除-WhatIf参数以删除文件。)