1 (изменено: ruslan, 2016-08-29 18:15:11)

Тема: CMD/BAT: Переместить созданный последним файл с новым именем

Помогите плз. несложный скрипт составить.

Нужно в папке (сетевая) , по маске, определить самый последний по дате создания файл.
Потом переместить его и переименовать, затерев ранее существующий там.

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

2

Re: CMD/BAT: Переместить созданный последним файл с новым именем

for /f %%# in ('dir *.txt /b/o-D') do move /y "%%#" "C:\Куда перемещать\новое имя.txt" &exit/b

3 (изменено: ruslan, 2016-08-30 16:46:58)

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Спасибо !
Но еще вопрос - как мне в качестве текущей папки указать сетевую (cd пишет не поддерживает) ?
Или как то иначе явно указать папку источник ?

Хотя на локальных ресурсах тоже не получается ...
Пробую так :


D:
CD "D:\backup\uso\"
for /f %%# in ('dir *.bak /b/o D') do move /y "%%#" "D:\backup\uso\Test\uso_lgss.bak" &exit/b

Отвечает - непредвиденное появление %%#.

4

Re: CMD/BAT: Переместить созданный последним файл с новым именем

ruslan
Батник сохранять в этой же папке пробовали?
Зачем сверху D: ?
CD не обязателен. Если сценарий сохранён в ином месте, то данный путь пишется перед маской *.bak.

5 (изменено: ruslan, 2016-08-30 17:07:55)

Re: CMD/BAT: Переместить созданный последним файл с новым именем

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

А если я хочу использовать скрипт как код CmdExec в Агенте SQL Сервера, как он изменится ?
Как измениться скрипт если использовать XCOPY , вместо MOVE ?

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

6

Re: CMD/BAT: Переместить созданный последним файл с новым именем

ruslan
Поменял порядок в своём примере (из головы вылетело, что начинается со старого).
Не знаю, как там устроено в агенте. Но всегда можно попробовать использовать либо полные либо относительные (агента) пути.
Xcopy не умеет перемещать файлы, она только копирует.
Вот robocopy умеет, но делает это по принципу копирования и удаления, а не изменения пути в рамках одного тома.

7

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Flasher пишет:

ruslan
Xcopy не умеет перемещать файлы, она только копирует.

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

8

Re: CMD/BAT: Переместить созданный последним файл с новым именем

for /f %%# in ('dir D:\backup\uso\*.bak /b/o-D') do xcopy /hrkxyz "%%#" "D:\backup\uso\Test\uso_lgss.bak" & goto:eof

А для CmdExec по идее и батник не нужен. Там команды достаточно:

cmd /c for /f %# in ('dir D:\backup\uso\*.bak /b/o-D') do xcopy /hrkxyz "%#" "D:\backup\uso\Test\uso_lgss.bak"&exit

9

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Flasher пишет:
for /f %%# in ('dir D:\backup\uso\*.bak /b/o-D') do xcopy /hrkxyz "%%#" "D:\backup\uso\Test\uso_lgss.bak" & goto:eof

В какой-то бесконечный цикл входит. А затем по ошибке падает.

10

Re: CMD/BAT: Переместить созданный последним файл с новым именем

А так?:

@echo off
cd D:\backup\uso
for /f %%# in ('dir *.bak /a-D/b/o-D/tC') do (
   echo f|xcopy /hrkyz "%%#" D:\backup\uso\Test\uso_lgss.bak
   goto:eof
)

Вместо первой D: ещё можно UNC-имя прописать.

11 (изменено: ruslan, 2016-08-31 15:44:08)

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Вот на такой код:

for /f %# in ('dir "D:\backup\uso\Test1\*.bak" /b/o-D') do 
xcopy /hrkxy "%#" "D:\backup\uso\Test\uso_lgss.bak"

отвечает -

C:\Windows\system32>xcopy /hrkxy "uso_lgss111.bak" "D:\backup\uso\Test\uso_lgss.bak"   Не найден файл: uso_lgss111.bak  Скопировано файлов: 0.    C:\Windows\system32>xcopy /hrkxy "uso_lgss222.bak" "D:\backup\uso\Test\uso_lgss.bak"   Не найден файл: uso_lgss222.bak  Скопировано файлов: 0.  Код завершения процесса 4.  Шаг завершился с ошибкой.

(файлы uso_lgss111.bak и uso_lgss222.bak лежат в папке исходнике).

Если код такой:

cd "D:\backup\uso\Test1"
for /f %# in ('dir "D:\backup\uso\Test1\*.bak" /b/o-D') do 
xcopy /hrkxy "%#" "D:\backup\uso\Test\uso_lgss.bak"

то ошибок нет, но ничего не происходит.

На следующий код :

@echo off
cd D:\backup\uso\Test1
for /f %%# in ('dir *.bak /a-D/b/o-D/tC') do (
   echo f|xcopy /hrkxyz "%%#" D:\backup\uso\Test\uso_lgss.bak
   goto:eof
)

отвечает -

Невозможно создать процесс для шага 3 задания 0x62A03265CCA42A458A8423DE302E2BBE (причина: Не удается найти указанный файл).  Шаг завершился с ошибкой.

12

Re: CMD/BAT: Переместить созданный последним файл с новым именем

XCOPY "D:\backup\uso\Test1\*.bak" "D:\backup\uso\Test\*.bak" /e /y /h /c

Работает без проблем, но он естественно копирует все что есть.

13

Re: CMD/BAT: Переместить созданный последним файл с новым именем

ruslan
Разбираем мой последний пример. Остальные нет смысла.
D:\backup\uso\Test1 - это реально существующая сетевая папка, и в ней лежат bak-файлы, так?
Если это тестируемая локальная папка, то 'z' на конце ключей xcopy нужно убрать. Также я убрал ключ 'x' из связки с 'z'.
И заодно систему назвать не помешает.

14 (изменено: ruslan, 2016-08-31 17:44:30)

Re: CMD/BAT: Переместить созданный последним файл с новым именем

D:\backup\uso\Test1  это реально существующая локальная папка (я для простоты тестирую пока на локальных).
Да, в ней лежат bak файлы.
Действительно, у меня были ошибки на связку параметра X c Z, пробовал убирать по отдельности и вместе.
Win Server 2012 R2.

15 (изменено: ruslan, 2016-08-31 17:43:53)

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Без параметров X и Z ошибка уже другая:

Невозможно создать процесс для шага 5 задания 0x62A03265CCA42A458A8423DE302E2BBE (причина: Не удается найти указанный файл).  Шаг завершился с ошибкой.

16

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Что покажет запуск cmd /k This.bat ?:

@echo off
cd D:\backup\uso\Test1
for /f %%# in ('dir *.bak /a-D/b/o-D/tC') do echo "%%#"&exit /b

17

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Flasher
Если запускаю скрипт в консоли cmd , то пишет

"непредвиденное появление %%#."

.
Если в Агенте SQL , то там ошибка :

Невозможно создать процесс для шага 6 задания 0x62A03265CCA42A458A8423DE302E2BBE (причина: Не удается найти указанный файл).  Шаг завершился с ошибкой.

18 (изменено: ruslan, 2016-08-31 17:43:23)

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Может разделить операции, сначала копирование, потом переименование ?

19

Re: CMD/BAT: Переместить созданный последним файл с новым именем

ruslan
2 заглавные буквы потерялись в постах. Исправляйтесь.

20

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Flasher
Исправил.

21

Re: CMD/BAT: Переместить созданный последним файл с новым именем

ruslan пишет:

Если запускаю скрипт в консоли cmd

Как именно?

22

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Flasher
Запускаю cmd /k через выполнить.
Затем копирую код скрипта и Enter.

23

Re: CMD/BAT: Переместить созданный последним файл с новым именем

ruslan
Дык это неверно. Я же показал, что выполнять нужно сразу с именем батника (в данном случае с путём) с имеющимся кодом. Ничего копипастить в консоль не надо.

24

Re: CMD/BAT: Переместить созданный последним файл с новым именем

Flasher
Если я Агенту SQL Сервера кормлю "cmd /k D:\backup\uso\Test1\This.bat" вместо кода самого скрипта, надолго задумывается, пока не остановишь, ошибок не выдает.

25

Re: CMD/BAT: Переместить созданный последним файл с новым именем

ruslan
Мы пока Run разбираем. К агенту позже вернёмся.