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

she*_*har 7 windows batch command-line rename batch-rename

我有一个目录结构如下:

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

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

  > ..........
Run Code Online (Sandbox Code Playgroud)

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

SubFolder1_Filename1.abc
SubFolder1_Filename2.abc
SubFolder2_Filename11.abc
SubFolder2_Filename12.abc
Run Code Online (Sandbox Code Playgroud)

即在文件名的开头添加文件夹名称,并使用分隔符“ _”。目录结构应保持不变。注意:文件名的开头相同。例如在上述情况下 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
  ) 
Run Code Online (Sandbox Code Playgroud)

上述脚本的问题在于它只采用一个子文件夹名称并将其放置在文件名的开头,而与文件夹无关。

dbe*_*ham 5

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

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

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

@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
Run Code Online (Sandbox Code Playgroud)

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

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


dez*_*lov 5

您可以使用ReNamer以更用户友好的方式执行此操作,并使用单个重命名规则:

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

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

在此处输入图片说明