I want to keep and I need to remove all the content(files, subfolders, sub-subfolders etc.) besides their relevant .htaccess file of all the mentioned paths, through a single script.
Você pode usar um FOR /F
loop e um DIR
com a opção /A-D
para excluir pastas e percorrer um diretório recursivamente para *.*
. Você pode usar condicional IF
logic para dizer se o arquivo iterado pelo comando DIR
é igual a um nome de .htaccess
, então não remova esse arquivo. Caso contrário, ele continuará para DEL
arquivos com outros nomes.
Agora que a limpeza do arquivo foi concluída, você pode usar Robocopy
com os caminhos de origem e de destino sendo os mesmos que, nesse ponto, devem ser todos, exceto para o aqueles contendo os arquivos .htaccess
.
Script em lote
Importante: Certifique-se de testar isso em um local de teste para garantir que seja suficiente antes de executar em sistemas de produção.
Observação: O top FOR
loop ( %%A
) será a lista de nomes de subpastas \ paths abaixo das pastas de nível pai do diretório principal que você deseja apenas a limpeza para aplicar a. Você pode usar o comando CALL
e passar o valor iterado como o primeiro argumento para a rotina abaixo que, em seguida, definirá o caminho completo final dos locais da pasta para executar a limpeza contra recursivamente.
@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
Mais recursos
- CALL
- PARA
-
- Substituições de lote (FOR /?)
In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax:
%~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
-
/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
-
/S :: copy Subdirectories, but not empty ones.
/MOVE :: MOVE files AND dirs (delete from source after copying).
Objeto de matriz de bônus como variável no lote
Você pode colocar a variável de matriz em vários formatos para usar como o valor de (set)
de um loop FOR
(exemplos abaixo). Você deve testar o formato escolhido e confirmar se cada valor iterado retorna corretamente com o comando ECHO
, como no meu exemplo, antes de usar para outros comandos. Eu comentei algumas das variações abaixo, mas tenho certeza que existem outros métodos, mas este é apenas um material bônus deste método em geral.
Além disso, tenho uma resposta sobre copiar array em um arquivo de lote para outro método em potencial que você poderia usar para emular uma matriz com indexação e iterar os valores subsequentes de acordo e usar padrões para variáveis de sub-rotina que são definidas antes de os comandos correlacionados serem processados.
@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