所有子文件夹中都存在基于一个文件(有时格式会有所不同)删除某些文件的批处理脚本

时间:2019-01-14 21:17:28

标签: batch-file

我在主文件夹下面有一些子文件夹

  • \ main \ sub1
  • \ main \ sub2 ...........

在这些子文件夹中,基本上,在sub1中,以下是3种标准文件类型:

  • 9980000000113100_2C8C6ADEPatT.P3D
  • 9980000000113100_2C8C6ADEPatT.P3D.txt
  • 9980000000113100_2C8C6ADEPatT.P3D.M71
  • 9980000000113100_2C8C6ADEPatT.P3D.pkg

在sub2中:txt文件和pkg文件缺少P3吗?以它的名字

  • 9980000001110000_00000000NARC.txt
  • 9980000001110000_00000000NARC.P3D
  • 9980000001110000_00000000NARC.P3D.M71
  • 9980000001110000_00000000NARC.pkg

.....

现在我可以使用以下代码     CD主     FOR / R %% G IN(* .TXT)是否存在“ %%〜dpnG” DEL“ %%〜dpnG”

删除子1中的 9980000000113100_2C8C6ADEPatT.P3D 。我无法删除sub2中的 9980000001110000_00000000NARC.P3D

是否可以删除* .P3? Sub1和Sub2中的文件是否存在,取决于该子文件夹中是否存在* .txt ...

我希望我说清楚...

谢谢

3 个答案:

答案 0 :(得分:0)

在您发表评论后,我想这就是您想要的:

@echo off
setlocal enabledelayedexpansion
for /R %%i in (*.txt) do (
  if exist "%%~dpni.pkg" set "fn=%%~dpni" & for %%a in (!fn!) do del %%~dpna*
)

我们搜索*.txt并获取其名称,无论它们叫​​什么名字。然后,我们测试文件名是否相同(扩展名.txt除外)并添加扩展名.pkg。然后,我们运行另一个循环以再次删除任何扩展名,如果从扩展名中删除了该扩展名,则该扩展名可能/不能包含P3*,那么,如果此条件为真,则意味着我们找到了两个filename.txtfilename.pkg(无论是否包含P3 *),我们只需运行`del filename *(包括P3 *并排除任何扩展名即可。

再次, note 我在del命令之前添加了echo,因此您可以测试并仅打印结果,仅从最后一行echo中删除do echo del %%~dpna*一旦您对显示在屏幕上的结果感到满意。

答案 1 :(得分:0)

根据您的错误解释,这是另一个最佳猜测:

@For /F "Delims=" %%A In ('Where /R . *.p3? 2^>Nul') Do @If Exist "%%~dpnA*.pkg" (If Exist "%%~dpnA*.txt" Del /A /F "%%A" >Nul 2>&1)

答案 2 :(得分:0)

for /r %%G in (*.P3?) do if exist "%%~G.txt" del "%%~G"

这将在sub1

中删除
  • 9980000000113100_2C8C6ADEPatT.P3D

如果存在

  • 9980000000113100_2C8C6ADEPatT.P3D.txt

确实存在,因此会删除。


这将在sub2

中删除
  • 9980000001110000_00000000NARC.P3D

如果存在

  • 9980000001110000_00000000NARC.P3D.txt

不存在,因此无需删除。