Командная строка для рекурсивного удаления файлов, но, исключая определенный файл

Ваше сравнение row[4] == 0 вернет TRUE, когда значение в точности равно 0 и что-либо оценивается как 0, в этом случае пустая строка.

Используйте строгую проверку на равенство для достижения желаемого результата:

if (row[4] === 0) {

См. Также:

10
задан Tim C 11 February 2009 в 09:36
поделиться

4 ответа

Хороший прием: сделайте файлы, которые Вы хотите исключить только для чтения!

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, Вы потеряете другой дескриптор файла.
8
ответ дан 3 December 2019 в 20:44
поделиться

Можно легко циклично выполнить ряд файлов и выполнить команду на каждом, как это:

set match=D:\blah\M*.zip
for %%x in (%match%) do (
del %%x
)

Затем я думаю, что необходимо прочитать эту статью о том, как управлять строками в DOS: http://www.dostips.com/DtTipsStringManipulation.php

3
ответ дан 3 December 2019 в 20:44
поделиться

Возможно, команда 'forfiles' могла быть полезной

http://technet.microsoft.com/en-us/library/cc753551.aspx

Надежда, которая помогает.

1
ответ дан 3 December 2019 в 20:44
поделиться

Этот сценарий удалит все файлы .zip из папки (и подпапок), НО ТОЛЬКО ЕСЛИ имя файла не содержит слова «резервное копирование», «Резервное копирование» или «РЕЗЕРВНОЕ КОПИРОВАНИЕ» и т. Д.

# Script DeleteZip.txt
var str folder, filelist, file
cd $folder
lf -r -n "*.zip" > $filelist
while ($filelist <> "")
do
    lex "1" $filelist > $file
    # Does this $file contain the word "backup" ? Do case independent search (-c option).
    if ( { sen -c "^backup^" $file } <= 0 )
        system del ("\""+$file+"\"")
    endif
done

Сценарий в битерскриптинге ( http://www.biterscripting.com ). Сохраните сценарий в файле C: /Scripts/DeleteZip.txt. Запустите сценарий как

script "C:/Scripts/DeleteZip.txt" folder("C:/testfolder")

Выполнит операцию удаления папки C: / testfolder и всех ее подпапок на всех уровнях.

1
ответ дан 3 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: