如何在使用Windows批处理通过子文件夹递归时获取子文件夹中的第一个文件

时间:2011-09-04 15:18:54

标签: batch-file

我目前正在努力让自己创建par2恢复文件更容易一些。以下脚本遍历所有当前文件夹的子文件夹,然后为所述子文件夹中的所有文件创建par2恢复文件。

FOR /R %%g IN (.) DO C:\WINDOWS\par2.exe c -r10 -s384000 "%%g\%%~ng.par2" "%%g\*"
del /q *.par2
pause

但是现在我有一个问题,它使用文件夹名称作为par2文件的文件名,但剥离了“扩展名”,就像它对文件一样。文件夹名称类似于“ConcertFootage1.avi_”。然后该文件夹将包含ConcertFootage1.avi.part01.rar和ConcertFootage1.avi.part02.rar等文件。含义我最终得到像“ConcertFootage1.par2”这样的par2文件,它应该是“ConcertFootage1.avi.par2”,以便正确匹配文件夹中的文件。

现在,即使它从foldername剥离“扩展名”,我仍然会以“ConcertFootage1.avi_.par2”结束,所以我认为最好是文件夹中文件的名称,并以此为基础,这意味着它只会剥离“.partX.rar”文件扩展名,这正是我所需要的。

我无法弄清楚如何在“FOR DO”命令中执行此操作,任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

我理解你的问题,你试图从文件名中删除两个扩展名。

您可以使用两个%~nX标记来执行此操作。

setlocal EnableDelayedExpansion
for /R %%g IN (.) DO (
  set "filename=%%~g"
  call :removeExtension result1 "!filename!"
  call :removeExtension result2 "!result1!"
  echo !filename! -- !result1! -- !result2!
)
exit /b

:removeExtension
set "%~1=%~n2"
exit /b