Я пытаюсь собрать пакетный файл, который добавит имя текущей папки в качестве префикса ко всем файлам в этой папке. Кроме того, это должно быть в состоянии запускаться несколько раз без дублирования префикса.

Я нашел это почти то, что мне нужно! Единственная проблема заключается в том, что он дублирует префикс при каждом запуске. Если бы кто-то мог указать мне правильное направление, я был бы очень полон!

@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 ответ1

0

Следующий фрагмент кода показывает возможный подход (один из многих способов); обратите внимание, что рабочая команда 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

Ресурсы (требуется чтение, не полностью):

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .