1

Тема: CMD/BAT: Переименование файлов по размеру

Добрый день. Написал после долгих мучений такой код.

for /r "D:\Test" %%i in (*.txt?) do ren "%%i" *.log

Меняет расширение всех фалов в D:\Test с .txt на .log, проблема в том, что необходимо в случае нахождения в папке более одного файла .txt, сменить расширение только у большего по размеру, остальные пропустить.

2

Re: CMD/BAT: Переименование файлов по размеру

@echo off
  setlocal
    pushd D:\test
      for /f %%i in (
        'dir /a-d *.txt ^| find /n /i /c ".txt"'
      ) do (
        if %%i equ 1 ren *.txt *.log &goto:end
        if %%i equ 2 (
          for /f "tokens=*" %%i in (
            'dir /a-d /os *.txt /b'
          ) do set "lf=%%~i"
        )
      )
      ren "%lf%" "%lf:.txt=.log%"
      :end
    popd
  endlocal
exit /b

3

Re: CMD/BAT: Переименование файлов по размеру

greg zakharov  Спасибо, замечательный код! Был бы очень благодарен если добавили бы в него возможность поиска по всему дереву каталога, а не в отдельно взятой папке. Потому как сейчас, в случае нахождения  подпапки приходится вручную  менять путь. К примеру D:\test\temp\temp2.

4

Re: CMD/BAT: Переименование файлов по размеру

@echo off
  setlocal
    set "p=D:\test"
    call:extchange %p%
    for /f "tokens=*" %%i in (
      'dir /ad /b /s %p%'
    ) do call:extchange "%%~i"
  endlocal
exit /b

:extchange
  pushd "%~1"
    for /f %%i in (
      'dir /a-d *.txt ^| find /n /i /c ".txt"'
    ) do (
      if %%i equ 1 ren *.txt *.log & goto:end
      if %%i equ 2 (
        for /f "tokens=*" %%i in (
          'dir /a-d /os *.txt /b'
        ) do set "lf=%%~i"
      )
    )
    ren "%lf%" "%lf:.txt=.log%"
    :end
  popd
exit /b

5

Re: CMD/BAT: Переименование файлов по размеру

greg zakharovРаботает, спасибо огромное. Очень познавательный код.

6 (изменено: zetix, 2016-04-24 17:50:51)

Re: CMD/BAT: Переименование файлов по размеру

Возможна ли в этом коде, еще одна модификация, обрабатывать данным образом только паки, где найдены файлы registrator.txt или partner.txt