Войти

Показать полную графическую версию : Помогите с копированием файла(ов) в сетевые папки


ZamUtil
07-11-2012, 12:15
Добрый день.
Буду признателен местным гуру за помощь в решении 2х (одна простая,вторая немого сложнее), но очень важных задач. Первая:
1. В некой локальной папке лежит батник.
2. В эту папку подкидываем файл(ы) - это может быть и екселевский, и текстовый, и архив и катртинка...
3. Запускаем батник и он копирует все в 25 папок на сервере (названия папок на известны). Батник копировать не надо,он остаетса в директории.
Вторую опишу чуть позже.
Спасибо

megaloman
07-11-2012, 21:58
Запускаем батник и он копирует все в 25 папок на сервере (названия папок на известны) - не понятно, куда копировать, Вы уж просветите, по какому принципу они определяются или создаются. Надо копировать или перемещать из локальной папки на сервер? А если на сервере уже есть такой файл в папке - что делать?

ZamUtil
08-11-2012, 00:57
- не понятно, куда копировать, Вы уж просветите, по какому принципу они определяются или создаются. Надо копировать или перемещать из локальной папки на сервер? А если на сервере уже есть такой файл в папке - что делать?
спасибо за отклик
1. 2. Локальний диск D:\Source\
тут лежит батник и подкидываем файли в эту директорию
3. Уточняю:
- Целевые директории,например:
\\server1\snd\Dir.01
\\server1\snd\Dir.02
\\server1\snd\Dir.03
...
\\server1\snd\Dir.25
они созданы и всегда там есть (это папки для адресатов, почтовый скрипт ее регулярно сканирует и чистит)

- файл копируем

- если файл уже такой есть, то оставляем той что был.

Iska
08-11-2012, 05:19
1. В некой локальной папке лежит батник.
2. В эту папку подкидываем файл(ы) …
3. Запускаем батник и он копирует все в 25 папок на сервере … Батник копировать не надо,он остаетса в директории. »
Никогда так не делайте. Не держите пакетный файл в той же папке, из которой будете плодить сущности.

ZamUtil
08-11-2012, 09:29
Никогда так не делайте. Не держите пакетный файл в той же папке, из которой будете плодить сущности.
за совет спасибо. в некоторой степени согласен
а по сути есть еще предложения? а то я написании батников полный нулл...

Busla
08-11-2012, 09:43
ZamUtil, батник, в простейшем случае - это просто список команд (каждая на отдельной строке), которые нужно последовательно выполнить. Вам нужно копировать, вот и вводим в Яндекс/Google "команда копирования".

Таким образом получите такую же хрень, как напишет кто-либо из форумчан. Потому что автоматизация так не делается - нужно вести логи работы; обрабатывать ошибки, громко сообщать о них и т.п. Лучше воспользуйтесь каким-нибудь готовым приложением для синхронизации/резервного копирования.

ZamUtil
08-11-2012, 23:32
Мне не хочется думать, что он должен попасть во все 25 папок сразу - должен...
это и есть первая задачка: один файл всем.

С Вашего вопроса плавно перейдем ко 2й задачке: есть кучка однотипных файлов, у каждого на 12- и 13-й позиции имени стоят циферки (00, 01, .... 25)
как уже говорилось ранее есть (сори, не 25) 26 директорий. так вот по 12му + 13му символу нужно определить в какую из директорий нужно копирнуть файл. то есть
\\server1\snd\Dir.00 - получит файл хххххххххх.00.ххх
\\server1\snd\Dir.01 - получит файл хххххххххх.01.ххх
\\server1\snd\Dir.02 - получит файл хххххххххх.02.ххх
\\server1\snd\Dir.03 - получит файл хххххххххх.03.ххх
...
\\server1\snd\Dir.24 - получит файл хххххххххх.25.ххх (это не ошибка!!, см. ниже)
\\server1\snd\Dir.25 - получит файл хххххххххх.24.ххх (это не ошибка!!, см. ниже)
По поводу 24-й и 25-й директории: существует не соответствие, и это факт. я ничего с этим не смогу сделать.
такие дела....

vserd
09-11-2012, 01:51
for, dir, if, set, copy, move эти команды вам будут нужны для создания скрипта автоматизации (в первом приближении, возможно что-то еще подтянется).
алгоритм следующий, в цикле (for) получаем командой dir список файлов, анализируем
12-13 позицию: set pos=%%a, set pos=%~pos:12,2%, в if определяем в какую папку копировать, копируем/перемещаем.

писать за вас никто не будет. Поищите по форуму, примеры есть.
cmd /k help set и help указанные выше команды (for, dir, if, set, copy, move )
а также вдумчивое изучение множества букв которые выводятся по этим командам, сделают из вашего полного нулла, класного специалиста.

megaloman
09-11-2012, 17:23
@Echo Off

Set Name=E:\Delete\Dir
Set Inbox=E:\Delete\Inbox

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

FOR %%f IN ("%Inbox%\*.*") DO (

Set OK=0
FOR /L %%n IN (1,1,25) DO (
Set /A NN=%%n+100
Set NN=!NN:~1,2!
Copy "%%f" "%Name%.!NN!\" >Nul 2>Nul
If Not !ErrorLevel!==0 Set OK=1
)
If !OK!==0 Del %%f
) В переменной Name пропишИте префикс имён ваших двдцати пяти папок (у меня в примере E:\Delete\Dir, у Вас будет префикс с сетевым именем типа \\server1\snd\Dir)
В переменной Inbox=E:\Delete\Inbox укажите исходную папку (у Вас это D:\Source )
Ваши пути не написал, так как отлаживал у себя - не вижу смысла подставлять ваши условные имена.
Если файлы успешно скопируются во все 25 папок, исходный файл удаляю.
Если этого делать не надо, убейте строку
If !OK!==0 Del %%f
и все остальные строки где помянута переменная ОК
Батник НЕ ДОЛЖЕН находиться внутри папки с исходными файлами, так как я этого не предусмотрел.
Можно и это предусмотреть, но пока лень.

megaloman
09-11-2012, 19:31
Вот вариант второй задачи@Echo Off

Set Name=E:\Delete\Dir
Set Inbox=E:\Delete\Inbox

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

FOR %%f IN ("%Inbox%\??????????.??.???") DO (

Set N_In=%%~nxf
Set N_In=!N_In:~11,2!

Set N_Out=!N_In!

If !N_In!==25 Set N_Out=24
If !N_In!==24 Set N_Out=25

Set /A N_In=1!N_In!+0 >nul 2>nul

If !N_In! GEQ 100 If !N_In! LEQ 125 Move /Y "%%f" "%Name%.!N_Out!\"

)

megaloman
09-11-2012, 19:53
Еще вариант
@Echo Off

Set Name=E:\Delete\Dir
Set Inbox=E:\Delete\Inbox

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

FOR /L %%n IN (0,1,25) DO (

Set /A N_In=%%n+100
Set N_In=!N_In:~1,2!

Set N_Out=!N_In!

If %%n == 25 Set N_Out=24
If %%n == 24 Set N_Out=25

Move /Y "%Inbox%\??????????.!N_In!.???" "%Name%.!N_Out!\" >nul 2>nul
)

В обоих вариантах я перемещаю исходные файлы в нужные папки. Можно, конечно, и копировать (заменить Move /Y на Copy), но смысл этого от меня ускользает.

ZamUtil
11-11-2012, 16:58
megaloman, спасибо. спасибо за реальный пример)
буду в понедельник на работе - попробую, отпишусь.

ZamUtil
29-11-2012, 01:21
чет не работает...(

megaloman
30-11-2012, 15:15
а нечёт? Что конкретно не получается? Для начала сделайте Echo On и попытайтесь осмыслить сообщения об ошибках, если они есть. А чёт - слишком мало ... Тяжело въезжать в задачу после месячного перерыва

Osmiy
02-12-2012, 18:56
Всем привет!
Извиняюсь что вопрос не по данной теме....... я новичок и не знаю куда можно было написать данное сообщение.
Помогите пожалуйсто ребята, вот такая проблема возникла:

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

C:\user\administrator>start \\192.168.04.15\temp\000.exe

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

Простите ещё раз....

Petya V4sechkin
02-12-2012, 19:40
как запустить файл на удалённом компе?
PsExec (http://technet.microsoft.com/ru-ru/sysinternals/bb897553)

Osmiy
02-12-2012, 20:09
Спасибо но я думаю это больше подойдёт для системных админов это очень сложно и я не понимаю в этом, просто мне когда то попалась статья где описано было как это делать с командной строки легко и просто...... у меня винда 7 может это влеяет на то что не могу открыть файл на удалённом компе?

Petya V4sechkin
02-12-2012, 21:35
это очень сложно
Совсем нет.
Там по-русски написано, и приведены примеры. Расценивайте это как вызов своему интеллекту.

Iska
02-12-2012, 23:28
это очень сложно »
Osmiy, чтобы добить Вас окончательно ;): ITband.ru » 7 способов выполнить команду на удалённом компьютере (http://itband.ru/2009/11/remote-execution/).




© OSzone.net 2001-2012