使文件夹名称与文件名相同

使文件夹名称与文件名相同

我有一个如下的目录结构:

Folder
    > FileName1.abc
    > Filename2.abc
    > .............

Folder2
    > FileName11.abc
    > Filename12.abc
    > ..............

> ..........

等等。我有一个可以将文件夹名称添加到文件名前面的命令。

样本:

Folder1_Filename1.abc
Folder1_Filename2.abc

我想把它改成这样。

使文件夹名称与文件名相同:

Folder1.abc
Folder1 (1).abc
Folder2.xyz
Folder2 (1).xyz

即结果我想用文件夹名称替换文件名。 如果有名称不同但扩展名相同的文件,他们可以在名称末尾添加 (1)、(2)。

脚本:


@echo off
pushd "Folder"
for /d %%D in (*) do (
  pushd "%%D"
  for /r %%F in (*) do (
    for %%P in ("%%F\..") do (
      ren "%%F" "%%~nxP_%%~nxF"
    )
  )
  popd
)
popd

上述命令没有实现我想要的效果。

此命令只是将文件夹名称添加到文件名的开头。


附言:我将命令改为"%%~nxP_%%~nxF"命令"%%~nxP%%~xF"。我几乎完成了我想要的。但有一次我看到只有 1 个具有相同扩展名的文件更改了名称。我一直在寻找一个可以在保存具有相同扩展名的文件名称时添加 (1)、(2)、(3) 的命令;但我找不到它。

详细示例:


Folder
    > Folder.jpg
    > Folder (1).jpg
    > Folder (2).jpg
    > .............

如果您知道除了上述命令之外还有其他命令可以完成我想要的操作,我将不胜感激。

你值得赞赏。

答案1

据我所知,这就是你想要的。

在发布的代码中,Rename-Item语句包含该-WhatIf参数,因此可以安全运行以产生示例结果,但实际上不会执行操作。如果示例输出是所需的输出,请-WhatIf从两个语句中删除该参数Rename-Item并重新运行代码。

对于具有相同扩展名的多个文件,代码更简单,只需为所有文件添加数字后缀,以 开头编号0。这样可以将单个语句/模式应用于所有文件。

在执行之前编辑$TopFolder赋值语句以反映有效路径。

$TopFolder    = '<Path to "Folder">'
Get-ChildItem $TopFolder -Directory | ForEach-Object{
    Get-ChildItem $_.FullName -File | Group-Object Extension | ForEach-Object{
        If ( $_.Count -eq 1 )
        {
            $_.Group[0] | Rename-Item -NewName { $_.Directory.Name + $_.Extension} -WhatIf
        }
        Else
        {
            $NameTemplate = $_.Group[0].Directory.Name + ' ({0})' + $_.Name
            For ( $i = 0 ; $i -lt $_.Count ; $i++ ) {
                $_.Group[$i] | Rename-Item -NewName ( $NameTemplate -f $i ) -WhatIf
            }
        }
    }
}

ForEach 对象

For 循环

群组对象

-f 格式运算符

相关内容