Я использовал приведенный ниже код в файле .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
введите описание изображения здесь
В чем может быть проблема?
Я буду очень признателен за любую помощь,
Любна
Если нужно защитить только один файл, все, что вам нужно сделать, это заблокировать его.
@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
(содержащая часть последней команды, которая блокирует файл для чтения) определяется только в том случае, если файл существуют.
Очень хорошо !, его можно легко расширить, чтобы заблокировать больше файлов (конечно, не намного), динамически создавая блок в скобках. < "file1" ( < "file2" ( ... ( rd . /s )...))
. Прирост производительности значительный при большой структуре каталогов. +1
у меня работает как шарм :) Спасибо за вашу помощь
используйте 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"
)
На ваше рассмотрение это одна строка в PowerShell:
Get-ChildItem C:\inetpub\Temp_FME\AutoCAD_Temp\* -File -Exclude Parcel.dwg | Remove-Item -WhatIf
(Если вывод правильный, удалите параметр -WhatIf
, чтобы удалить файлы.)
Это много проще с PowerShell - просто используйте
Get-ChildItem
с-Exclude
и подключитесь кRemove-Item
.