1

Тема: CMD/BAT: переименовать файлы в папке.

Здравствуйте!
в папке лежат файлы вида YYYYMMDDHH00XX (два последних символа случайны) их нужно переименовать к виду DD_MM_HH-00
если в эту папку записывается новый файл желателен пропуск такого файла.

я то сделал так:

rename "X:\Arh\????%date:~3,2%%date:~0,2%%t%00*.mpg" "%file%_00.mpg"

Но тут большой недостаток - я должен это запускать каждый час, а как сделать сразу все!!!
Пропуск файла делаю так - на 59 минуте запускаю получаю необходимые переменные, timeout ~60 сек. и копирование 1 файла из прошлого часа!


Спасибо за готовый ответ!

2 (изменено: yuriy2000, 2012-02-03 17:11:09)

Re: CMD/BAT: переименовать файлы в папке.

bnp322 пишет:

Здравствуйте!
в папке лежат файлы вида YYYYMMDDHH00XX (два последних символа случайны) их нужно переименовать к виду DD_MM_HH-00
если в эту папку записывается новый файл желателен пропуск такого файла.

rename "X:\Arh\????%date:~3,2%%date:~0,2%%t%00*.mpg" "%file%_00.mpg"

1. Не совсем понятны условия.
2. Очевидно, что приведен лишь фрагмент кода
3. рекомендую воспользоваться конструкцией типа FOR %F in (YYYYMMDDHH*.mpg) do  rename ....
YYYY MM  DD извлекается из %DATE%
HH извлекается из переменной окружения %TIME%, либо из свойства переменной файла (переменной %F)

(%~tF  - переменная %F расширяется до даты /времени файла)

3 (изменено: yuriy2000, 2012-02-03 17:53:01)

Re: CMD/BAT: переименовать файлы в папке.

Вот пример - переименует все файлы в папке C:\TEST1\ по дате-времени создания

@echo off
set FOLDER=C:\TEST1\
if exist %temp%\files.lst del %temp%\files.lst
FOR %%A in (%FOLDER%\*.*) do @echo %%~txA "%%A"  >>%temp%\files.lst
FOR /F "tokens=1-6,* delims=.: " %%A in (%temp%\files.lst) do @rename %%G %%A_%%B_%%D_00.%%F
rem %%A - день
rem %%B - месяц
rem %%C - год
rem %%D - час
rem %%E - минуты
rem %%F - расширение файла
rem %%G - имя исходного файла
del %temp%\files.lst

4 (изменено: bnp322, 2012-02-07 04:26:41)

Re: CMD/BAT: переименовать файлы в папке.

Спасибо большое!

Это именно то, что мне нужно (тут используется время создания файлов  )!!!


Но это не так!?  Справка:

%~tI Замена %I временем модификации файла, а нужно время создания файлов  !!!


Если не сложно, на будущее, я хотел бы иметь cmd аналогичный предыдущему, но делающий еще перенос этих файлов в папки (переменные из предыдущего файла)  вида:

С:\%B%\%A%\%D_00.%%F

Само имя файла только:

%D_00.%%F

Не сочтите за наглость!

5 (изменено: yuriy2000, 2012-02-07 18:12:50)

Re: CMD/BAT: переименовать файлы в папке.

FOR /F "tokens=1-6,* delims=.: " %%A in (%temp%\files.lst) do (
copy %%G  С:\%%B\%%A%\%%D_00.%%F && del %%G
)

6

Re: CMD/BAT: переименовать файлы в папке.

Спасибо!

%%~txA    - конструкция "дает" время изменения файла, а как получить время создания файла!?

7

Re: CMD/BAT: переименовать файлы в папке.

bnp322 пишет:

Спасибо!

%%~txA    - конструкция "дает" время изменения файла, а как получить время создания файла!?

ЧЕРЕЗ vbs скрипт можно который создаётся сам из батника

8

Re: CMD/BAT: переименовать файлы в папке.

bnp322 пишет:

как получить время создания файла!?

Либо через VBSсript, либо сторонние утилиты заменить время модификации на время создания и потом использовать данный batch файл.

9

Re: CMD/BAT: переименовать файлы в папке.

dir /t:c file

10

Re: CMD/BAT: переименовать файлы в папке.

Спасибо!
В текущий CMD это не "внедрить".
А как написать новый, используя dir /t:c

11 (изменено: !k, 2012-02-09 23:39:11)

Re: CMD/BAT: переименовать файлы в папке.

set "folder=Z:\test1\"
set "mask=201???????00??.*"

for /f "delims=" %%n in ('dir /b "%folder%\%mask%"') do (
    for /f "tokens=1-4 delims=:-/. " %%a in ('dir /tc "%folder%\%%n" ^|find " %%n"') do (
        echo ren "%folder%\%%n" "%%a_%%b_%%d-00%%~xn"
    )
)

если всё правильно – убери echo

12 (изменено: bnp322, 2012-02-10 08:30:58)

Re: CMD/BAT: переименовать файлы в папке.

set "folder=c:\123\"
set "mask=*.mpg"

for /f "delims=" %%n in ('dir /b "%folder%\%mask%"') do (
    for /f "tokens=1-5 delims=:-/. " %%a in ('dir /t:c "%folder%\%%n" ^|find " %%n"') do (
       ren "%folder%\%%n" "%%a_%%b_%%d-%%e%%~xn"
))

Ра-бо-та-ет!!! Спасибо большое!!!  Я уж начал думать как сиё через vbs (GetDetailsOf) сделать, но до этого было далеко, а вообще задача простая и, я, искренне удивляюсь почему её нет в готовом виде!
  Это из той же серии - как я пытался автоматизировать загрузку новых файлов с ftp, задача простая, должна быть многим интересна, а в готовом виде не нашел. Тольку усилиями форумчан скрипт получился!

Последний вопросик!!! Как в такой цикл ввести месяц русскими буквами, в обычном батнике я делал это так

set mymonth=%date:~3,2%
if "%mymonth%" == "01" set mymonth=џ­ў ам
if "%mymonth%" == "02" set mymonth=”Ґўа «м
if "%mymonth%" == "03" set mymonth=Њ ав
if "%mymonth%" == "04" set mymonth=ЂЇаҐ«м
if "%mymonth%" == "05" set mymonth=Њ ©
if "%mymonth%" == "06" set mymonth=?о­м
if "%mymonth%" == "07" set mymonth=?о«м
if "%mymonth%" == "08" set mymonth=ЂўЈгбв
if "%mymonth%" == "09" set mymonth=‘Ґ­впЎам
if "%mymonth%" == "10" set mymonth=ЋЄвпЎам
if "%mymonth%" == "11" set mymonth=Ќ®пЎам
if "%mymonth%" == "12" set mymonth=„ҐЄ Ўам

Куда вставить это в Ваш цикл - затрудняюсь!

13

Re: CMD/BAT: переименовать файлы в папке.

  Нюанс (если кому будет интересно):
Вместо dir /t:с я стал использовать dir /t:a  т.к. :
1. обычно (у меня!) они (результат команды) равны.
2. Если файл "2" является продолжением файла "1" (у меня такое происходит при записи aver media центром и лимите на файл 2 Gb )
то у файликов "1" и "2" результат от применения    dir /t:с   одинаков, а    dir /t:a   -  разный и как раз!

14 (изменено: !k, 2012-02-10 21:47:50)

Re: CMD/BAT: переименовать файлы в папке.

@echo off &chcp 1251 >nul
setlocal enableextensions enabledelayedexpansion

set "folder=Z:\test1\"
set "mask=201???????00??.*"

set "month01=Январь"
set "month02=Февраль"
set "month03=Март"
set "month04=Апрель"
set "month05=Май"
set "month06=Июнь"
set "month07=Июль"
set "month08=Август"
set "month09=Сентябрь"
set "month10=Октябрь"
set "month11=Ноябрь"
set "month12=Декабрь"

for /f "delims=" %%n in ('dir /b "%folder%\%mask%"') do (
    for /f "tokens=1-4 delims=:-/. " %%a in ('dir /ta "%folder%\%%n" ^|find " %%n"') do (
        echo ren "%folder%\%%n" "%%a_!month%%b!_%%d-00%%~xn"
    )
)

*м.б. лучше "!month%%b!_%%a__%%d-00%%~xn" ?

15 (изменено: bnp322, 2012-02-13 13:06:44)

Re: CMD/BAT: переименовать файлы в папке.

Спасибо!
Все лаконично и работает, использовал конструкцию:

for /f "delims=" %%n in ('dir /b "%folder1%\%mask%"') do (
    for /f "tokens=1-5 delims=:-/. " %%a in ('dir /t:a "%folder1%\%%n" ^|find " %%n"') do (
    md "%path%\%%a_!month%%b!" & move "%folder1%\%%n" "%path%%\%%a_!month%%b!\%%d-%%e%%~xn"
  ))

для красоты я бы добавил отбрасывание незначащих нулей числа, и времени переменных %%a и %%d, что-то типа:

If "%%a:~0,1" == "0" Set %%a=%%a:~1,1

Возможно? Не переделывая все!:)