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

问题描述 投票:-1回答:3

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

    @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

这可能是什么问题?

我会非常感谢任何帮助,

Lubna

windows powershell batch-file
3个回答
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变量(保存将锁定文件以供读取的最终命令的一部分)存在。


0
投票

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

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

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


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"
)
© www.soinside.com 2019 - 2024. All rights reserved.