Компьютерный форум 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=240428)

Zayaca 12-08-2012 03:10 1968789

Копирование файлов из экселевского списка
 
Есть файл base.xls . В столбце Y начиная со второй строки указаны числовые id.
Имена файлов начинаются с символа "a", затем идёт id и разные расширения (например при id 3333 маска файлов будет a3333.* )
Файлы раскиданы по 5ти разным компьютерам в сети (имена pc1 - pc5), постоянно в одних и тех же каталогах (\\pc*\d$\base\), но постоянно на разных компах.
Как вытащить все id и заставить батник пройтись по всем компам и собрать эти файлы в локальный каталог (d:\base_all\) ?

На данный момент это огромный батник, заполняемый руками, что очень неудобно и долго
Код:

xcopy \\pc1\d$\base\a4664.* d:\base_all\ /y /c
xcopy \\pc2\d$\base\a4664.* d:\base_all\ /y /c
xcopy \\pc3\d$\base\a4664.* d:\base_all\ /y /c
xcopy \\pc4\d$\base\a4664.* d:\base_all\ /y /c
xcopy \\pc5\d$\base\a4664.* d:\base_all\ /y /c

И так для каждого файла

Iska 12-08-2012 04:35 1968793

Цитата:

Цитата Zayaca
Как вытащить все id и заставить батник »

Никак. Потребуется Automation, чтобы «вытащить все id».

Поскольку Вы не выложили образец файла, придётся строить предположения. Будем считать, что данные находятся на первом листе рабочей книги.
читать дальше »
WSH:
Код:

Option Explicit

Dim i


With WScript.CreateObject("Excel.Application")
        With .Workbooks.Open("E:\Песочница\0168\base.xls")
                With .Sheets.Item(1)
                        i = 2
                       
                        Do
                                With .Cells.Item(i, Asc("Y") - Asc("A") + 1)
                                        If Not IsEmpty(.Value) Then
                                                WScript.Echo .Value
                                                i = i + 1
                                        Else
                                                Exit Do
                                        End If
                                End With
                        Loop
                End With
               
                .Close
        End With
       
        .Quit
End With

WScript.Quit 0


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

for /f "usebackq delims=" %%i in (`cscript.exe //nologo "E:\Песочница\0168\0001.vbs"`) do echo %%i
Такой периодический набор:
Код:

xcopy \\pc1\d$\base\a4664.* d:\base_all\ /y /c
xcopy \\pc2\d$\base\a4664.* d:\base_all\ /y /c
xcopy \\pc3\d$\base\a4664.* d:\base_all\ /y /c
xcopy \\pc4\d$\base\a4664.* d:\base_all\ /y /c
xcopy \\pc5\d$\base\a4664.* d:\base_all\ /y /c

легко сворачивается в цикл:
Код:

for %%j in (pc1 pc2 pc3 pc4 pc5) do xcopy \\%%j\d$\base\a4664.* d:\base_all\ /y /c
Таким образом, примерный вид может быть таким:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion


for /f "usebackq delims=" %%i in (`cscript.exe //nologo "E:\Песочница\0168\0001.vbs"`) do (
        for %%j in (pc1 pc2 pc3 pc4 pc5) do xcopy \\%%j\d$\base\a%%i.* d:\base_all\ /y /c
)

endlocal
exit /b 0


Zayaca 12-08-2012 10:03 1968827

Спасибо, работает.


Время: 13:06.

Время: 13:06.
© OSzone.net 2001-