Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Помогите с копированием файла(ов) в сетевые папки (http://forum.oszone.net/showthread.php?t=246391)

ZamUtil 07-11-2012 12:15 2020719

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

megaloman 07-11-2012 21:58 2021120

Цитата:

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

ZamUtil 08-11-2012 00:57 2021223

Цитата:

- не понятно, куда копировать, Вы уж просветите, по какому принципу они определяются или создаются. Надо копировать или перемещать из локальной папки на сервер? А если на сервере уже есть такой файл в папке - что делать?
спасибо за отклик
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 2021301

Цитата:

Цитата ZamUtil
1. В некой локальной папке лежит батник.
2. В эту папку подкидываем файл(ы) …
3. Запускаем батник и он копирует все в 25 папок на сервере … Батник копировать не надо,он остаетса в директории. »

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

ZamUtil 08-11-2012 09:29 2021358

Цитата:

Никогда так не делайте. Не держите пакетный файл в той же папке, из которой будете плодить сущности.
за совет спасибо. в некоторой степени согласен
а по сути есть еще предложения? а то я написании батников полный нулл...

Busla 08-11-2012 09:43 2021365

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

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

ZamUtil 08-11-2012 23:32 2021914

Цитата:

Мне не хочется думать, что он должен попасть во все 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 2021981

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 2022437

Код:

@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 2022502

Вот вариант второй задачи
Код:

@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 2022518

Еще вариант
Код:

@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 2023539

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

ZamUtil 29-11-2012 01:21 2034991

чет не работает...(

megaloman 30-11-2012 15:15 2035932

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

Osmiy 02-12-2012 18:56 2037239

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

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

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

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

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

Petya V4sechkin 02-12-2012 19:40 2037278

Цитата:

Цитата Osmiy
как запустить файл на удалённом компе?

PsExec

Osmiy 02-12-2012 20:09 2037307

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

Petya V4sechkin 02-12-2012 21:35 2037361

Цитата:

Цитата Osmiy
это очень сложно

Совсем нет.
Там по-русски написано, и приведены примеры. Расценивайте это как вызов своему интеллекту.

Iska 02-12-2012 23:28 2037436

Цитата:

Цитата Osmiy
это очень сложно »

Osmiy, чтобы добить Вас окончательно ;): ITband.ru » 7 способов выполнить команду на удалённом компьютере.


Время: 20:22.

Время: 20:22.
© OSzone.net 2001-