Я хочу сохранить и мне нужно удалить весь контент (файлы, подпапки, подпапки и т.д.), Кроме соответствующего файла .htaccess всех указанных путей, с помощью одного скрипта.
Вы можете использовать цикл FOR /F
и команду DIR
с параметром /A-D
для исключения папок и рекурсивного просмотра каталога для *.*
Вы можете использовать условную логику IF
чтобы сказать, что если итеративный файл для команды DIR
равен имени .htaccess
, то не удаляйте этот файл. В противном случае он перейдет к файлам DEL
с другими именами.
Теперь, когда очистка файла завершена, вы можете использовать Robocopy
с одинаковыми исходными и целевыми путями, которые на данный момент должны быть всеми, кроме тех, которые содержат файлы .htaccess
.
Пакетный скрипт
Важное замечание: Обязательно протестируйте это в тестовом месте, чтобы убедиться, что этого будет достаточно перед запуском в рабочие системы.
Примечание . Верхний цикл FOR
(%%A
) будет списком имен вложенных папок \ путей под папками родительского уровня основного каталога, к которым вы хотите применить только очистку.Вы можете использовать команду CALL
и передать итеративное значение в качестве первого аргумента подпрограмме, которая затем установит окончательный полный путь расположения папок для рекурсивного запуска очистки.
@ECHO ON
FOR %%A IN (test,site1,site2\folder,pub\static) DO (CALL :routine "%%~A")
GOTO :EOF
:routine
SET SrcDir=C:\UwAmp\www\magento2root\%~1
FOR /F "TOKENS=*" %%p IN ('DIR /S /B /A-D "%SrcDir%\*.*"') DO IF NOT [%%~nxp]==[.htaccess] DEL /Q /F "%%~p"
ROBOCOPY "%SrcDir%" "%SrcDir%" /S /MOVE
IF NOT EXIST "%SrcDir%" MD "%SrcDir%"
GOTO :EOF
Дополнительные ресурсы
- ВЫЗОВ
- ЗА
FOR /F
Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
DIR
/A Displays files with specified attributes.
attributes D Directories R Read-only files
H Hidden files A Files ready for archiving
S System files I Not content indexed files
L Reparse Points - Prefix meaning not
ЕСЛИ
- DEL
Robocopy
/S :: copy Subdirectories, but not empty ones.
/MOVE :: MOVE files AND dirs (delete from source after copying).
Мэриленд
Бонусный массив как переменная в пакете
Вы можете поместить переменную массива в различные форматы, чтобы затем использовать ее в качестве (set)
значения части цикла FOR
(примеры ниже). Вы должны проверить выбранный формат и подтвердить правильность каждого повторного значения с помощью команды ECHO
как в моем примере, прежде чем использовать его для других команд. Я прокомментировал несколько вариантов ниже, но я уверен, что есть другие методы, но это всего лишь бонусный материал этого метода в целом.
Кроме того, у меня есть ответ о копировании массива в пакетном файле для другого потенциального метода, который вы могли бы использовать для эмуляции массива с индексированием и повторением последующих значений соответственно и с использованием стандартов для переменных подпрограммы, которые устанавливаются перед обработкой коррелированных команд.
@ECHO ON
::SET array=1,2,3,4,"5","6","7/7","8"
::SET array=1,2,3,4,5,6,7/7,8
::SET array=1 2 3 4 5 6 7/7 8
SET array=1 2 3 4 5 6 "7 / 7" 8
FOR %%A IN (%array%) DO ECHO %%~A
PAUSE