我有一个如下的目录结构:
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
}
}
}
}