1

Тема: CMD/BAT: Переименовать файл в подпапках каталога

Здравствуйте Уважаемые программисты!
Подскажите пожалуйста, как исправить код ниже, чтобы работало следующее:
при запуске bat файла для всех вложенных папок в папке "Оснпапка" выполнялось копирование файла с именем "filename.doc" из "C:\Install\files\filename.doc", а если такой файл во вложенных папках существует, то сначала переименовать его на "filename.bak" и затем скопировать новый "filename.doc" из "C:\Install\files\filename.doc"?

Код:

@ECHO on
CD\
C:
CD Оснпапка
for /f "tokens=*" %%i in ('dir /b /ad') do (
rename filename.doc filename.bak
copy /Y "C:\Install\files\filename.doc" "%%i"
)
pause

Сейчас данный код только копирует файл "filename.doc" из "C:\Install\files\filename.doc" во все вложенные папки каталога "Оснпапка".
Заранее спасибо!

2

Re: CMD/BAT: Переименовать файл в подпапках каталога

for /f "tokens=*" %%i in ('dir /b /ad /s') do (
 ren "%%i\filename.doc" "filename.bak" 2>nul
 copy "C:\Install\files\filename.doc" "%%i"
)

3

Re: CMD/BAT: Переименовать файл в подпапках каталога

Yury пишет:
for /f "tokens=*" %%i in ('dir /b /ad /s') do (
 ren "%%i\filename.doc" "filename.bak" 2>nul
 copy "C:\Install\files\filename.doc" "%%i"
)

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

4

Re: CMD/BAT: Переименовать файл в подпапках каталога

Подскажите пожалуйста, как в этом же коде сделать создание не просто файла "filename.bak", а файла по типу "filename_дата_время.bak"? Т.е. при запуске bat: имеющийся файл "filename.doc" переименовывался в "filename_дата_время.bak", затем удалялся (filename.doc) и вставлялся новый "C:\Install\files\filename.doc"?
Заранее спасибо!

5

Re: CMD/BAT: Переименовать файл в подпапках каталога

Решение найдено!

6 (изменено: Yury, 2014-04-14 15:37:17)

Re: CMD/BAT: Переименовать файл в подпапках каталога

ольга пишет:

по типу "filename_дата_время.bak"



Какие дата и время?


Если это дата и время последнего изменения файла, то так:

setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /b /ad /s') do (
 for /f %%j in ("%%i\filename.doc") do (
  set date_time=%%~ti
  set date_time=!date_time: =_!
  ren "%%j" "filename_!date_time::=.!.bak" 2>nul
 )
 copy "C:\Install\files\filename.doc" "%%i"
)

.


Если это текущие дата и время, то так:

setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /b /ad /s') do (
 set date_time=!date!_!time::=.!
 ren "%%i\filename.doc" "filename_!date_time:~,-3!.bak" 2>nul
 copy "C:\Install\files\filename.doc" "%%i"
)

.




ольга пишет:

имеющийся файл "filename.doc" переименовывался в "filename_дата_время.bak", затем удалялся (filename.doc)



Да удаляться-то после переименования уже как-то и нечему.

7

Re: CMD/BAT: Переименовать файл в подпапках каталога

Спасибо большое Yury! Все работает!

8 (изменено: ypppu, 2014-04-20 10:01:40)

Re: CMD/BAT: Переименовать файл в подпапках каталога

Подскажите пожалуйста,как в коде ниже дописать, чтобы после переименования файла "filename.doc" в "filename_!date_time:~,-3!.bak", он (bak) перемещался (с заменой) в папку C:\Temp (если папки Temp нет, то прежде создать ее)?

@ECHO on
CD\
C:
CD Оснпапка
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /b /ad /s') do (
 set date_time=!date!_!time::=.!
 ren "%%i\filename.doc" "filename_!date_time:~,-3!.bak" 2>nul
 copy "C:\Install\files\filename.doc" "%%i"
)
pause

Заранее спасибо!

9

Re: CMD/BAT: Переименовать файл в подпапках каталога

setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir "filename.doc" /a-d /b /s 2^>nul') do (
 set date_time=!date!_!time::=.!
 ren "%%i" "filename_!date_time:~,-3!.bak"
 md "C:\Temp" 2>nul
 del /q "C:\Temp\*.bak" 2>nul
 move "%%~dpi*.bak" "C:\Temp" 2>nul
 copy "C:\Install\files\filename.doc" "%%~dpi"
)

10

Re: CMD/BAT: Переименовать файл в подпапках каталога

ольга, как Вы заметили, код в вашем сообщении волшебным образом обрамился тегом "code".

11

Re: CMD/BAT: Переименовать файл в подпапках каталога

Спасибо!