Войти

Показать полную графическую версию : [решено] Копирование файлов из экселевского списка


Zayaca
12-08-2012, 03:10
Есть файл 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
Как вытащить все 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
Спасибо, работает.




© OSzone.net 2001-2012