1 (изменено: ypppu, 2013-01-21 12:30:19)

Тема: JS/BAT: Копирование файла из одной папки в другую с заменой

Вобщем проблема следующая.
Нужен батник или .js, который будет брать файл из под сети с определенного компьютера и копировать на компьютер, с которого мы его запускаем в указанный нам путь.
В предыдущих темах много прочитал и нашел один батник, он работает, проверял, но не могу разобраться, как убрать то, чтобы он не создавал папки по дате и не копировал файлы по папкам с датой.
Вот батник:

@echo off
set sourcedir=C:\1
set destdir=K:\1
for /F "usebackq tokens=1-5,* delims=. " %%i in (`dir %sourcedir%\Data*.kml /O:D /A:-D^|findstr /R "\Data.*\.kml$"`) do (
if not exist %destdir%\%%j.%%k md %destdir%\%%j.%%k
copy /y %sourcedir%\%%n %destdir%\%%j.%%k\
)

Взят из темы: http://forum.script-coding.com/viewtopic.php?id=5297
А мне просто нужно, чтобы он скопировал файл с set sourcedir=*** в set destdir=***, в коде уже изменил расширение файла, в исходники с темы они копировали файл с расширение .txt, а у меня файл .kml.
Еще момент такой, файл в корневой папке, из которого мы его копируем, всегда один, но он изменяется по дате, то есть нам надо чтобы он менялся на более свежий, но в принципе можно фильтрации по дате избежать, используя обычную замену файла. Еще главное чтобы в батнике было прописано подтверждение замены. Т. к. этот батник будет в автозагрузке лежать и пользователи не должны знать о его существовании.
И еще вопрос. Есть ли возможность сделать этот батник типо .exe, чтобы "обмануть" пользователей. Для чего это нужно. Админы мне сказали, что батник должен запускаться через минуту после входа в систему, т. к. устанавливаются права уч. записи. Т. е. если я кину его в автозагрузку, у меня он работать не будет. Можно ли указать в батнике временной интервал его запуска. или же проще сделать батник со встроенной командой на открытие приложение.
То есть люди не будут знать что это батник, а будут открывать программу (будет изменён значок ярлыка и имя), а у них будет происходить сначала копирование, а потом открываться программа. Этот вариант впринципе наиболее оптимальный.
Заранее спасибо!

2

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

m.aleksey, предложения начинаются с заглавной буквы и заканчиваются точкой. Исправьте ошибки.

3

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

ypppu пишет:

m.aleksey, предложения начинаются с заглавной буквы и заканчиваются точкой. Исправьте ошибки.

Вроде все исправил. А вы не подскажите как решить мне описанную выше проблему?

4

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

m.aleksey пишет:

[..]
в предыдущих темах много прочитал и нашел один батник, он работает, проверял, но не могу разобраться как убрать то, чтобы он не создавал папки по дате и не копировал файлы по папкам с датой.
[..]

В этой строке команда "MD <имя_новой_папки>"


if not exist %destdir%\%%j.%%k md %destdir%\%%j.%%k

- создает ненужный Вам каталог "%%j.%%k", т.е. ее по идее надо просто закомментарить/выбросить.

А в следующей строке - копирование идет не в желаемую Вами папку, а в созданный ненужный подкаталог, т.е. по идее Вам надо укоротить второй параметр - папку назначения...

copy /y %sourcedir%\%%n %destdir%\%%j.%%k\

m.aleksey пишет:

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

Почитайте хелп к команде "XCOPY". Заменив ею команду "COPY" можно воспользоваться параметром, указывающим что копировать нужно только более новые файлы.

xcopy /?
WBR. Roman

5

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

m.aleksey пишет:
ypppu пишет:

m.aleksey, предложения начинаются с заглавной буквы и заканчиваются точкой. Исправьте ошибки.

Вроде все исправил. А вы не подскажите как решить мне описанную выше проблему?

Почти всё. Остальное я исправил. Если всё так туго, пользуйтесь проверкой правописания в браузере или текстовом редакторе.

6 (изменено: m.aleksey, 2013-01-21 13:40:00)

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

Я не силен в программировании, тем более .bat или .js, но я единственный из офиса, кто с чужой помощью сможет это сделать.

Rom5 пишет:
m.aleksey пишет:

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

Почитайте хелп к команде "XCOPY". Заменив ею команду "COPY" можно воспользоваться параметром, указывающим что копировать нужно только более новые файлы.

xcopy /?

То есть если я правильно понял, мне нужно эти 2 строчки кода :

if not exist %destdir%\%%j.%%k md %destdir%\%%j.%%k
copy /y %sourcedir%\%%n %destdir%\%%j.%%k\

Заменить на:

xcopy \\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml \\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\Data.kml /u /y /h /z

\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml - Это путь, в котором лежит файл, который нужно заменить по этому пути \\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\Data.kml

То есть код в конечном итоге получаеться такой:

@echo off
set sourcedir=\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\
set destdir=\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\
for /F "usebackq tokens=1-5,* delims=. " %%i in (`dir %sourcedir%\*.kml /O:D /A:-D^) do (xcopy \\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml \\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\Data.kml /u /y /h /z)

Если есть ошибка, помогите исправить и если не затруднит весь код с описанием.
И как можно привязать открытие файла с расширением .exe в этот код. То есть чтобы он скачало заменял файлы, а потом открывал саму программу с уже обновленной базой.
Заранее спасибо!

7

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

ypppu пишет:
m.aleksey пишет:
ypppu пишет:

m.aleksey, предложения начинаются с заглавной буквы и заканчиваются точкой. Исправьте ошибки.

Вроде все исправил. А вы не подскажите как решить мне описанную выше проблему?

Почти всё. Остальное я исправил. Если всё так туго, пользуйтесь проверкой правописания в браузере или текстовом редакторе.

Я извиняюсь за ошибки, пишу на скорую руку.

8

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

@echo off 
 xcopy/u/y/v/e/h/r/d/z "\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\" "\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\"
 echo РЕЗЕРВИРОВАНИЕ УСПЕШНО ЗАВЕРШЕНО 
 pause

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

9

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

Попробуйте так:


xcopy "\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml" "\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers" /D /Y /U /Z
Echo.
Pause
WBR. Roman

10

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

Rom5 пишет:

Попробуйте так:


xcopy "\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml" "\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers" /D /Y /U /Z
Echo.
Pause

Не получаеться!
Делаю батник

@echo off 
xcopy "\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml" "\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers" /D /Y /U /Z
Echo.
Pause

Пишет что скопировано файлов : 0.

Или же нужно в этом батнике :

@echo off
set sourcedir=\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\
set destdir=\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\
for /F "usebackq tokens=1-5,* delims=. " %%i in (`dir %sourcedir%\*.kml /O:D /A:-D^) do (
xcopy \\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml \\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\Data.kml /u /y /h /z
)

Добавлять заместо:

xcopy \\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml \\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\Data.kml /u /y /h /z

Но тут тоже ошибка, ничего не происходит.
Наверное ошибка в синтаксисе For. Но я честно говоря не понимаю что там нужно изменить.
Пробовал еще копировать с сетевого пути \\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\ на жесткий диск компьютера, на котором работал, тоже без успешно.

11 (изменено: Rom5, 2013-01-21 16:24:57)

Re: JS/BAT: Копирование файла из одной папки в другую с заменой

Команда DIR (вывод списка файлов) что-то возвращает?

DIR "\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml"
Pause

В принципе для копирования одного единственного файла, путь к которому Вы знаете и он не меняется, цикл FOR и не нужен, достаточного одного XCOPY.

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


Echo test-test-test > "\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\_test.txt"
DIR "\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\_test.txt"
Pause

Потом уже пробовать копировать (подправил ключи: /U - был ошибочный, /H /R - копирование и системных файлов и с аттрибутом "только чтение"):


xcopy "\\LIDER18-NOTE\Users\lider18\AppData\Roaming\Grym\MyLayers\Data.kml" "\\LIDER16-NOTE\\Users\lider16\AppData\Roaming\Grym\MyLayers\*.*" /D /Y /Z /H /R
Echo.
Pause
WBR. Roman