プロジェクトをクリーンアップするには、palette-library
バッチ スクリプト ファイルの現在の場所から始まる という名前のすべての (サブ) フォルダーを見つけて、 というフォルダーpenstyle-opacity textures
と というファイルを除くすべてのコンテンツを削除する必要がありますpenstyle-opacity.plt
。私は Windows 7 を使用しています。
Google でいろいろ検索しましたが、今のところ、フォルダー内のすべてのコンテンツを検索、発見、削除するか、事前に定義された場所から特定のファイル以外のすべてを削除するスニペットしか見つかりません。しかし、この 2 つを組み合わせることができません。
答え1
最もエレガントな方法ではないかもしれませんが、最初にマスクでファイルをアーカイブし、次にファイル ツリーを消去し、最後にパスを使用してアーカイブを解凍することができます。
例えば:
7z a -r my_archive penstyle-opacity.plt
または:
7z a -r my_archive "palette-library\penstyle-opacity textures\penstyle-opacity.plt"
試してみて、自分に合ったものを選んでみてください。
答え2
最初のパラメータは削除するフォルダで、残りはファイル例外のリストです。ワイルドカードが許可されており、リストに一致するファイルを除くすべてのフォルダとそのサブフォルダを削除します。コツは、最初にすべての例外を非表示にして、削除後に非表示を解除することです。
@echo off
rem test routine
call :DELDIREXCEPT "c:\testfolder" "pru 2" "must leave.docx" *.jpg *.png *.exe
GOTO :FIN
REM * * * * SUBROUTINES FROM HERE * * * *
REM
:DELDIREXCEPT
rem deletes folder except a list of files
rem ~ removes quotes
set delDir=%~1
if not exist "%delDir%" goto :FIN
pushd %delDir% 2>nul || goto :FIN
rem get rest of params
shift
rem https://stackoverflow.com/questions/357315/how-to-get-list-of-arguments/34920539#34920539
rem Delayed expansion disabled in order not to interpret "!" in param values;
rem however, if a param isn't quoted, chars like "^", "&", "|" get interpreted
setlocal disabledelayedexpansion
set param_0=0
:repeat
set "lastparam=%~1"
set /a param_0+=1
if defined lastparam (
set "param_%param_0%=%lastparam%"
echo Hide: "%lastparam%"
attrib "%lastparam%" +h /s /d 2>nul
shift
goto :repeat
) else set /a param_0-=1
setlocal enabledelayedexpansion
echo .. deleting %delDir%
del /s /q /a-h *.* 2> NUL
echo ...
:: unhide arguments
for /l %%Z in (1 1 %param_0%) do (
echo/ unHide: "!param_%%Z!"
attrib /s /d "!param_%%Z!" -h 2>nul
)
popd
goto :FIN
REM END DELDIREXCEPT
:FIN