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

timbird 22-05-2013 15:21 2154041

Поиск и копирование определенных файлов из папок
 
Добрый день!
Помогите решить задачи:
[РЕШЕНО]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 2154174

читаем 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 2154190

Код:

ROBOCOPY \\SERVER\SHARE \\SERVER\SHARE2 *QQQ*.xsl *WWW*.xsl /S
Зто и весь BAT-файл. И всё, что нужно, скопируется на свои места.

timbird 23-05-2013 08:50 2154520

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

timbird 23-05-2013 09:53 2154544

Georgio, действительно все сработало замечательно, не думал что все так просто. Спасибо.

megaloman 23-05-2013 10:07 2154556

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

timbird 23-05-2013 11:25 2154599

megaloman, да все работает, спасибо за пояснения) буду знать)

Iska 23-05-2013 14:50 2154757

Цитата:

Цитата megaloman
а Robocopy в XP еще не было. »

Была. Ещё в 2000-ой. Но не в поставке. В Resource Kit'ах.

timbird 21-02-2014 17:35 2313216

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

Georgio 21-02-2014 18:34 2313262

Цитата:

Цитата timbird
только из папок с определенными именами »

Для "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 2313526

Georgio, спасибо за ответ, но в моем случае это слишком жестоко.. просто папок для исключения очень много нужно писать..

Iska 22-02-2014 16:10 2313684

timbird, переходите на PowerShell. У него развитые возможности по фильтрации и рекурсии.

timbird 22-02-2014 19:42 2313798

Iska, поделитесь кодом?

Iska 22-02-2014 21:25 2313848

Цитата:

Цитата timbird
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
}



Время: 03:31.

Время: 03:31.
© OSzone.net 2001-