将当前文件夹添加为文件名前缀而不重复

将当前文件夹添加为文件名前缀而不重复

我正在尝试拼凑一个批处理文件,将当前文件夹名称作为前缀添加到该文件夹​​中的所有文件。此外,这需要能够多次运行而不会重复前缀。

我发现这个几乎就是我需要的!唯一的问题是每次运行时都会重复前缀。如果有人能给我指明正确的方向,我会非常感激!

@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

这是由https://superuser.com/users/109090/dbenham针对这个问题将文件夹名称添加到文件名开头

答案1

下一个代码片段展示了一种可能的方法(众多方法之一);请注意,操作ren命令仅仅echo ren ...为了调试目的而被回显():

@ECHO OFF
SETLOCAL EnableExtensions
goto :skipProcedures

:testPrefix
call set "newN=%%oldN:*%prfx%=%%"
if /i not "%oldN%"=="%newN%" if /i "%oldN%"=="%prfx%%newN%" set "ToRename="
goto :eof

:skipProcedures
pushd "Folder"
for /d %%D in (*) do (
  pushd "%%D"
  for /r %%F in (*) do (
    for %%P in ("%%F\..") do (
      set "ToRename=Yes"
      set "prfx=%%~nxP_"
      set "oldN=%%~nxF"
      call :testPrefix
      if defined ToRename (
        echo ren "%%F" "%%~nxP_%%~nxF"
      ) else (
        echo prefixed already "%%F" "%%~nxF"
      )
    )
  )
  popd
)
popd

资源(必读,未完成):

相关内容