Войти

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


timbird
22-05-2013, 15:21
Добрый день!
Помогите решить задачи:
[РЕШЕНО]1.Нужно скопировать .xsl файлы, в названии которых есть постоянная часть, например "QQQ" и "WWW" (пример имени файла: 12sd3_QQQ_1.xsl, 34s1_QQQ. xsl, 2fs45_WWW_we.xsl 6as58_WWW.xsl). Таких файлов много и они лежат на ряду с другими файлами в разных папках на одном общем ресурсе.

Скопировать нужно на ресурс \\share2 с той же структурой каталогов

пример:

\\SHARE
|_2012
|_oct
|_dep
| |_01.2012
| | |_send
| | | |_12sd3_QQQ_1.xsl
| | | |_2fs45_WWW.xsl
| | | |_sdds.xsl
| | |_control
| |
| |_02.2012
| |_send
| | |_34s1_QQQ. xsl
| | |_6as58_WWW.xsl
| | |_sdds.xsl
| |_control
|
|_ipo
| |_02.2013
| | |_send
| | | |_12sd3_QQQ.xsl
| | | |_2fs45_WWW_we.xsl
| | | |_sdds.xsl
| | |_control
| |_05.2012
| | |_send
| | | |_34s1_QQQ. xsl
| | | |_6as58_WWW.xsl
| | | |_sdds.xsl
| | |_control
| |
| |_07.2012
| |_send
| | |_34s1_QQQ_2. xsl
| | |_6as58_WWW.xsl
| | |_sdds.xsl
| |_control
|_cred
|_ и т.п.
|
|_nov
|_и т.п.
|
|
|_2013
|_и т.п.



2. Как сделать, чтобы допустим эти файлы "12sd3_QQQ_1.xsl" копировались только из папок с определенными именами например "01-NAME-iqwuey" которые находятся на \\server\share ??

megaloman
22-05-2013, 18:52
читаем xcopy /?xcopy \\Server1\Share1\Откуда\*WWW*.xsl \\Server2\Share2\Куда\ /s /y
xcopy \\Server1\Share1\Откуда\*QQQ*.xsl \\Server2\Share2\Куда\ /s /y Если копируем из корня ресурса в корень ресурса, то xcopy \\Server1\Share1\*WWW*.xsl \\Server2\Share2\ /s /y
xcopy \\Server1\Share1\*QQQ*.xsl \\Server2\Share2\ /s /y

Georgio
22-05-2013, 19:28
ROBOCOPY \\SERVER\SHARE \\SERVER\SHARE2 *QQQ*.xsl *WWW*.xsl /S

Зто и весь BAT-файл. И всё, что нужно, скопируется на свои места.

timbird
23-05-2013, 08:50
megaloman, т.е. придется прописать "откуда" (пути через все папки и подпапки) к нужным файлам в ручную? это будет очень длинный список

timbird
23-05-2013, 09:53
Georgio, действительно все сработало замечательно, не думал что все так просто. Спасибо.

megaloman
23-05-2013, 10:07
timbird, Вы недопоняли. У вас есть сервер \\Server1, на нём есть расшаренный ресурс Share1, на нём может быть папка Откуда (или не может быть -см. второй вариант). Все файлы из папки Откуда по указанной маске из всех подпапок копируются в папку на \\Server2 на ресурс \Share2\ в папку Куда\ с сохранением структуры подпапок.
Во втором варианте, все файлы по маске, в том числе и в корне расшаренного ресурса, переносятся в корень другого расшаренного ресурса.
Второй вариант полностью эквивалентен решению Georgio, за исключением того, что для каждой маски надо написать (практически продублировать с изменением маски файла) свою команду xcopy (это недостаток), но зато xcopy будет работать в любом Windows, а Robocopy в XP еще не было.

timbird
23-05-2013, 11:25
megaloman, да все работает, спасибо за пояснения) буду знать)

Iska
23-05-2013, 14:50
а Robocopy в XP еще не было. »
Была. Ещё в 2000-ой. Но не в поставке. В Resource Kit'ах.

timbird
21-02-2014, 17:35
Добрый день, в продолжение темы!
Как сделать, чтобы допустим эти файлы "12sd3_QQQ_1.xsl" копировались только из папок с определенными именами например "01-NAME-iqwuey" которые находятся на \\server\share ??

Georgio
21-02-2014, 18:34
только из папок с определенными именами »

Для "ROBOCOPY" это возможно только методом исключения тех папок, которые копироваться не будут (т. е. копируем только папку "01-NAME-iqwuey", а пишем после ключа "/XD" имена исключаемых папок): ROBOCOPY \\SERVER\SHARE \\SERVER\SHARE2 *QQQ*.xsl /S /XD "01-NAME2-iqwuey" "01-NAME3-iqwuey"

timbird
22-02-2014, 09:40
Georgio, спасибо за ответ, но в моем случае это слишком жестоко.. просто папок для исключения очень много нужно писать..

Iska
22-02-2014, 16:10
timbird, переходите на PowerShell. У него развитые возможности по фильтрации и рекурсии.

timbird
22-02-2014, 19:42
Iska, поделитесь кодом?

Iska
22-02-2014, 21:25
Iska, поделитесь кодом? »
Примерно так:
$sSourceFolder = "E:\Песочница\0364\Source"
$sDestFolder = "E:\Песочница\0364\Destination"

if(Test-Path -Path $sSourceFolder -PathType Container) {
if(Test-Path -Path $sDestFolder -PathType Container) {
Get-ChildItem -Path $sSourceFolder -Include "*QQQ*.xsl", "*WWW*.xsl" -Recurse |`
Where-Object -FilterScript { $_.DirectoryName -like "*01-NAME-iqwuey*" } |`
ForEach-Object -Process {
$DestPath = $sDestFolder + ($_.DirectoryName).Substring($sSourceFolder.Length)

if(-not (Test-Path -Path $DestPath -PathType Container)) {
New-Item -Path $sDestFolder -Name ($_.DirectoryName).Substring($sSourceFolder.Length + 1) -ItemType Container | Out-Null
}

Write-Host $_.FullName
Copy-Item -Path $_.FullName -Destination $DestPath -Force
}
} else {
Write-Host "Destination folder [$sDestFolder] not found." -ForegroundColor Red
}
} else {
Write-Host "Source folder [$sSourceFolder] not found." -ForegroundColor Red
}




© OSzone.net 2001-2012