如何在批处理文件中删除具有特定名称的文件

如何在批处理文件中删除具有特定名称的文件

我有一个目录%userprofile%\appdata\roaming\.minecraft\versions并且在该目录中有一大堆文件夹,我想要一个批处理文件来删除名称中带有 forge 的所有文件夹。

这些文件夹中没有子文件,但每个文件夹中有 2 个文件...我希望使用批处理文件自动删除该目录中名称中带有 forge 的所有内容。

因此,删除所有名称中包含 forge 的文件夹。我似乎无法做到这一点。

我曾尝试用谷歌搜索一些东西,但我记不清我尝试过的所有东西......但这里有一些。

rmdir /s %userprofile%\appdata\roaming\.minecraft\versions

for /d /r . %d in (forge) do @if exist "%d" rd /s/q "%d"

另外,尝试了这个(下面),但它只列出了我想要删除的文件夹和文件。

dir "%userprofile%\appdata\roaming.minecraft\versions" /s /b /d | find "forge"

答案1

@echo off & set "_target=%userprofile%\appdata\roaming.minecraft\versions"
for /f tokens^=* %%i in ('dir /s/b/a:d "%_target%\*forge*"')do echo/RMDir /q/s "%%~i"
  • 或者...
@set "_target=%userprofile%\appdata\roaming.minecraft\versions"
@for /f tokens^=* %%i in ('dir /s/b/a:d "%_target%\*forge*"')do @echo/RMDir /q/s "%%~i"

1)将目标路径设置为变量

set "_target=%userprofile%\appdata\roaming.minecraft\versions"

2)使用For /fdir /s /b /a:d列出所需文件夹:

for /f tokens^=* %%i in ('dir /s /b /a:d "!_target!\*forge*"')...

3)查看for循环命令和echo输出...

')do echo/RMDir /q/s "%%~i"

4)如果之前的输出没问题,则删除echo命令递归删除文件夹和可能的子文件夹/文件...

echo/RMDir /q /s "%%~i"

对于命令行帮助,您可以使用/?

Set /?, For /?, RMDir /?

在互联网上,您可以获得更多有关以下方面的帮助:

答案2

电源外壳:

使用该-WhatIF参数,您可以安全地进行“测试运行”,以查看命令将删除哪些文件夹。如果列出的项目是您想要删除的项目,请删除该-WhatIf参数。

$target = Join-Path $env:appdata '.minecraft\versions'
Get-ChildItem $Target -filter '*forge*'-Directory | Remove-Item -Recurse -Force -WhatIf

连接路径 获取子项 除去项目 递归

答案3

在构建这种类型的批处理程序时,请帮自己一个忙,在运行最终版本之前,用 echo 或确认替换结束命令,测试解析的文件是否与要实现的目标正确对应

@Echo Off
PUSHD %userprofile%\appdata\roaming.minecraft\versions
For /R %%A in (*forge*) do (
    IF "%%~xA" == "" (
        Choice /N /C ny /M "Remove Folder? %%A"
        IF Errorlevel 2 (RMDIR "%%A")
    ) Else (
        Del /P "%%A"
    )
)
POPD
Pause

答案4

如果你想查找并删除名称中带有“forge”的文件,只需输入锻造在搜索栏中,然后按 CTRL + A 选择所有文件(文件名包含 forge)并点击删除

相关内容