将文件夹名称添加到文件名开头

将文件夹名称添加到文件名开头

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

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

  > SubFolder2
    > FileName11.abc
    > Filename12.abc
    > ..............

  > ..........

等等。我想将子文件夹内的文件重命名为:

SubFolder1_Filename1.abc
SubFolder1_Filename2.abc
SubFolder2_Filename11.abc
SubFolder2_Filename12.abc

即在文件名开头添加文件夹名称,并使用分隔符“ _”。目录结构应保持不变。注意:文件名开头相同。例如在上述情况下为 File*。

我制作了以下脚本


for /r "PATH" %%G in (.) do (
  pushd %%G
  for %%* in (.) do  set MyDir=%%~n* 
  FOR %%v IN (File*.*) DO REN %%v  "%MyDir%_%%v" 
  popd
  ) 

上述脚本的问题在于它只采用一个子文件夹名称并将其放在文件名的开头,而不管文件夹如何。

答案1

你可以使用更用户友好的方式做到这一点重命名器,使用一条重命名规则:

  1. 插入“:File_FolderName:_”作为前缀(跳过扩展名)

您还可以将其保存为预设并将其用于命令行重命名

在此处输入图片描述

答案2

仅重命名直接子文件夹中的文件

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

递归重命名子文件夹中的所有文件

@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

确保只运行一次脚本!您不想在文件前面放置多个前缀 :-)

可以添加额外的代码以确保它可以安全地多次运行。

答案3

如果您只想重命名子文件夹内的文件,这就是解决方案。

for %%f in (.) do set "A=%%~dpnxf\"
for /r "%A%" %%f in (.) do call :func "%%~f"
goto :EOF
:func
set "B=%~1"
for %%g in ("%B%") do set "C=%%~dpnxg"
for %%g in ("%C%") do set "D=%%~nxg"
cd  %C%
set "k=%C%\"
if NOT %A%==%k% FOR %%v IN (*.*) DO REN "%%v" "%D%_%%v" 
goto :EOF

答案4

我使用批量重命名实用程序(TGRMN 软件),它有很多重命名选项;包括将文件夹名称作为前缀或后缀附加到文件名,包括选择它们之间的分隔符,以及要附加到哪一级子文件夹

批量重命名实用程序

相关内容