6

У меня есть структура каталогов, как показано ниже:

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

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

  > ..........

и т.д. Я хочу переименовать файлы в подпапках как:

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

т.е. добавьте имя папки в начале имени файла с разделителем " _ ". Структура каталогов должна оставаться неизменной. Примечание. Начало имени файла совпадает. например, в вышеупомянутом случае Файл *.

Я сделал ниже скрипт


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

Проблема с приведенным выше сценарием заключается в том, что он берет только одно имя подпапки и помещает его в начало имени файла независимо от папки.

4 ответа4

5

Вы можете сделать это более удобным для пользователя способом, используя ReNamer, с одним правилом переименования:

  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

Убедитесь, что вы запускаете любой скрипт только один раз! Вы не хотите ставить несколько префиксов перед файлами :-)

Можно добавить дополнительный код, чтобы сделать его безопасным для многократного запуска.

1

Если вы хотите переименовать файлы внутри подпапки, то это только решение.

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
1

Вы можете сделать это легко с помощью Windows Powershell. Это двухстрочный скрипт для переименования всех файлов в подпапках так, как имя файла получает префикс имени подпапки. Рассмотрим эту простую структуру на диске D:

D:\folder1\Sub1

         Sub1 - AAAA.txt
          Sub1 - BBBB.txt
           Sub1 - CCC.txt

D:\folder1\Sub2

          0 AAAAA.txt
          0 CCCC.txt

Вот сценарий:

PS C:\Users\ Пользователь> cd D:\ folder1

PS D:\folder1> get-childitem -recurse | Переименовать-Item -NewName {$ .Справочник.Имя + "-" + $.Название}

При запуске скрипта все файлы будут переименованы с префиксом имени каталога.

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