C# Avalonia 專案編譯會在runtimes 資料夾內產生很多垃圾資料夾和垃圾檔案 如何使用BAT直接清除不必要的垃圾
C# Avalonia 專案編譯會在runtimes 資料夾內產生很多垃圾資料夾和垃圾檔案 如何使用BAT直接清除不必要的垃圾
資料來源: copilot+自己
問題00:我有一個runtimes資料夾 裡面有很多子檔案夾 且所有資檔案夾裡面又有檔案和檔案夾
我要如何使用BAT的命令只保留win開頭的子目錄和他底下的檔案夾和目錄
bat_code
REM cleanup_runtimes.bat @echo off setlocal enabledelayedexpansion REM 設定 ruintimes 資料夾的路徑 set "sourceDir=.\runtimes" REM 遍歷所有子目錄 for /d %%i in ("%sourceDir%\*") do ( set folderName=%%~nxi REM 檢查子目錄是否以 "win" 開頭 if /i not "!folderName:~0,3!"=="win" ( REM 刪除不以 "win" 開頭的子目錄 rd /s /q "%%i" ) ) echo 清理完畢! pause
問題01:那如我要改成 只留下 win win-x64 兩個子目錄和他的下面檔案 要如何修改
bat_code
@echo off setlocal enabledelayedexpansion REM 設定 runtimes 資料夾的路徑 set "sourceDir=.\runtimes" REM 遍歷所有子目錄 for /d %%i in ("%sourceDir%\*") do ( set folderName=%%~nxi REM 檢查子目錄是否以 "win" 或 "win-x64" 命名 if /i not "!folderName!"=="win" if /i not "!folderName!"=="win-x64" ( REM 刪除不符合條件的子目錄 rd /s /q "%%i" ) ) echo 清理完畢! pause
問題02:讓VS2022編譯專案時自動執行BAT清除不要了垃圾檔
VPOS_Avalonia.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <BuiltInComInteropSupport>true</BuiltInComInteropSupport> <ApplicationManifest>app.manifest</ApplicationManifest> <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault> <Platforms>AnyCPU;x64</Platforms> <ApplicationIcon>sys.ico</ApplicationIcon> <AssemblyName>VPOS</AssemblyName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> <Deterministic>True</Deterministic> <Optimize>False</Optimize> <DebugType>full</DebugType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> <Deterministic>True</Deterministic> <Optimize>False</Optimize> <DebugType>full</DebugType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> <Deterministic>True</Deterministic> <Optimize>True</Optimize> <DebugType>full</DebugType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> <Deterministic>True</Deterministic> <Optimize>True</Optimize> <DebugType>full</DebugType> </PropertyGroup> <PropertyGroup Label="Avalonia"> <AvaloniaXamlIlDebuggerLaunch>False</AvaloniaXamlIlDebuggerLaunch> <AvaloniaXamlVerboseExceptions>False</AvaloniaXamlVerboseExceptions> <FileVersion>2.0.0.1</FileVersion> </PropertyGroup> <ItemGroup> <Folder Include="Models\" /> <AvaloniaResource Include="Assets\**" /> </ItemGroup> <ItemGroup> <Content Include="sys.ico" /> </ItemGroup> <ItemGroup> <PackageReference Include="AnimatedImage.Avalonia" Version="2.0.0" /> <PackageReference Include="Avalonia" Version="11.2.3" /> <PackageReference Include="Avalonia.Controls.DataGrid" Version="11.2.3" /> <PackageReference Include="Avalonia.Desktop" Version="11.2.3" /> <PackageReference Include="Avalonia.Themes.Fluent" Version="11.2.3" /> <PackageReference Include="Avalonia.Fonts.Inter" Version="11.2.3" /> <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.--> <PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.2.3" /> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" /> <PackageReference Include="Costura.Fody" Version="6.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Dapper" Version="2.1.35" /> <PackageReference Include="Jint" Version="3.0.1" /> <PackageReference Include="Microsoft.NET.ILLink.Tasks" Version="9.0.1" /> <PackageReference Include="System.Data.SQLite.Core" Version="1.0.119" /> <PackageReference Include="System.Drawing.Common" Version="9.0.1" /> <PackageReference Include="System.IO.Ports" Version="9.0.1" /> <PackageReference Include="System.Management" Version="9.0.1" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.1" /> </ItemGroup> <ItemGroup> <None Update="cleanup.bat"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> <None Update="SQLite3.dll"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup> <!-- 新增一個全域的後建目標 --> <Target Name="CleanupAfterBuild" AfterTargets="Build;Rebuild;Publish"> <Exec Command="cmd /c "$(TargetDir)cleanup.bat"" /> <Exec Command="cmd /c del "$(TargetDir)cleanup.bat"" /> <Exec Command="cmd /c del "$(TargetDir)log.txt"" /> </Target> </Project>
cleanup.bat
@echo off setlocal enabledelayedexpansion echo 開始清理>>%~dp0log.txt REM 設定 runtimes 資料夾的路徑 set "sourceDir=%~dp0\runtimes" REM 遍歷所有子目錄 for /d %%i in ("%sourceDir%\*") do ( set folderName=%%~nxi echo 檢查資料夾: !folderName! >>%~dp0log.txt REM 檢查子目錄是否以 "win" 或 "win-x64" 命名 if /i not "!folderName!"=="win" if /i not "!folderName!"=="win-x64" ( REM 刪除不符合條件的子目錄 rd /s /q "%%i" echo 刪除: %%i >>%~dp0log.txt ) )
One thought on “C# Avalonia 專案編譯會在runtimes 資料夾內產生很多垃圾資料夾和垃圾檔案 如何使用BAT直接清除不必要的垃圾”
visual studio 2022 C# 專案檔(csproj) 當 LINUX C/C++ Makefile 在寫