Хороший трюк: сделайте файлы, которые вы хотите исключить, только для чтения !
DEL /S
не удалит файл только для чтения.
Следующий скрипт не выполняет точно того, что вы хотите (см. Мои замечания ниже), но показывает вам, как файлы, доступные только для чтения, могут быть использованы для предотвращения удаления.
@ECHO OFF
:: This example supposes your first parameter is
:: the relative path to the folder to be deleted
:: and the second is the relative path (from the
:: the target folder) of the one to be excluded
:: Notice that this will only work if the folders
:: are in the working drive, if not, you ll
:: have to specify full paths
IF "%1"=="" GOTO ERROR
IF "%2"=="" GOTO ERROR
IF NOT EXIST %1\NUL GOTO ERROR
CD %1
IF NOT EXIST %2\NUL GOTO ERROR
ECHO Starting up the deletion process
ECHO. * Setting attributes
attrib %1\*.mp3 -r -s -h > NUL
attrib %2\*.mp3 +r > NUL
ECHO. * Deleting files
del /s %1\*.mp3
ECHO. * Reseting attributes
attrib %2\*.mp3 -r > NUL
ECHO.
ECHO Operation completed!
ECHO.
GOTO END
:ERROR
ECHO Parameters:
ECHO. Param1 -> target folder
ECHO. Param2 -> folder to be ignored
ECHO.
GOTO END
:END
Примечание: вы можете адаптировать этот скрипт, чтобы игнорировать не только подпапку, но и все файлы данного типа:
attrib /S *.xxx +r > NUL
фактически поможет вам исключить все файлы 'xxx' из текущего каталога и все подкаталоги (отсюда и опция /S
).
Примечание: часть "> NUL
" представляет собой перенаправление , часто используемое для скрытия стандартного вывода вместо отображения его на экране.
Это может быть опасно, если используется слишком часто (например, в большом цикле с различными путями), поскольку это устройство и, как и все устройства (AUX
, COMn
, LPTn
, NUL
и PRN
):
- открытие устройства потребует один дескриптор файла. Однако, в отличие от файлов, устройства никогда не будут закрыты до перезагрузки.
- каждое устройство существует в каждом каталоге на каждом диске, поэтому, если вы использовали перенаправление на
NUL
, скажем, C:\
, и после этого используете его снова в C:\TEMP
, вы потеряете другой дескриптор файла.