如何使用批处理文件合并名称相似的文件夹

如何使用批处理文件合并名称相似的文件夹

我正在尝试编写一个命令,可以合并目录中所有具有相似名称的文件夹。现在所有这些文件夹都是唯一命名的,所以我认为你可以根据文件夹的前 5 个字符来建立“相似名称”的概念。

文件夹看起来像

longyellowbus-092092301
longyellowbus-92382012
5fatmimn-324535232
hintout-239119393
hintout-2391038949
hintout-2983419101
dogscats-293457893
2dummerboy-9293982
2dummerboy-29848292

我想将所有名称相似的文件夹合并到一个文件夹中,并且其中的一些内容相同,因此可以覆盖。所以最终结果基本上是这样的。

longyellowbus-092092301
5fatmimn-324535232
hintout-239119393
dogscats-293457893
2dummerboy-9293982

破折号后面的数字 - 并不重要,事实上我将在合并后尝试删除它们,所以剩下的只是干净的文件夹名称。

longyellowbus
5fatmimn
hintout
dogscats
2dummerboy

我遇到了难题,希望你们能帮忙。这只是我一直在写的一个更大的命令的一部分,这也是我遇到难题的部分。

答案1

以下批处理通过在分隔符 - 处拆分目录名称来解析目录的输出,%%A 为第一个标记,%%B 为其余部分。如果不存在与第一个标记类似的目录,则将其重命名,如果存在,则强制移动长名称目录的内容,然后删除目录。
编辑路径以适合您的环境。

@Echo off
pushd "C:\path\to\your\base\folder"
for /f "Tokens=1* Delims=-" %%A in (
  'Dir /B /AD *-*'
) Do If Not Exist "%%A" (
  Ren "%%A-%%B" "%%A"
) Else (
  Move /Y "%%A-%%B\*" "%%A\"
  RmDir "%%A-%%B"
)
PopD

相关内容