 |
|
Поиск и копирование определенных файлов из папок
Добрый день!
Помогите решить задачи:
[РЕШЕНО]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 ??
|
читаем 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
|
Код:
ROBOCOPY \\SERVER\SHARE \\SERVER\SHARE2 *QQQ*.xsl *WWW*.xsl /S
Зто и весь BAT-файл. И всё, что нужно, скопируется на свои места.
|
megaloman, т.е. придется прописать "откуда" (пути через все папки и подпапки) к нужным файлам в ручную? это будет очень длинный список
|
Georgio, действительно все сработало замечательно, не думал что все так просто. Спасибо.
|
timbird, Вы недопоняли. У вас есть сервер \\Server1, на нём есть расшаренный ресурс Share1, на нём может быть папка Откуда (или не может быть -см. второй вариант). Все файлы из папки Откуда по указанной маске из всех подпапок копируются в папку на \\Server2 на ресурс \Share2\ в папку Куда\ с сохранением структуры подпапок.
Во втором варианте, все файлы по маске, в том числе и в корне расшаренного ресурса, переносятся в корень другого расшаренного ресурса.
Второй вариант полностью эквивалентен решению Georgio, за исключением того, что для каждой маски надо написать (практически продублировать с изменением маски файла) свою команду xcopy (это недостаток), но зато xcopy будет работать в любом Windows, а Robocopy в XP еще не было.
|
megaloman, да все работает, спасибо за пояснения) буду знать)
|
Цитата:
Цитата megaloman
а Robocopy в XP еще не было. »
|
Была. Ещё в 2000-ой. Но не в поставке. В Resource Kit'ах.
|
Добрый день, в продолжение темы!
Как сделать, чтобы допустим эти файлы "12sd3_QQQ_1.xsl" копировались только из папок с определенными именами например "01-NAME-iqwuey" которые находятся на \\server\share ??
|
Цитата:
Цитата timbird
только из папок с определенными именами »
|
Для " ROBOCOPY" это возможно только методом исключения тех папок, которые копироваться не будут (т. е. копируем только папку " 01-NAME-iqwuey", а пишем после ключа " /XD" имена исключаемых папок):
Код:
ROBOCOPY \\SERVER\SHARE \\SERVER\SHARE2 *QQQ*.xsl /S /XD "01-NAME2-iqwuey" "01-NAME3-iqwuey"
|
Georgio, спасибо за ответ, но в моем случае это слишком жестоко.. просто папок для исключения очень много нужно писать..
|
timbird, переходите на PowerShell. У него развитые возможности по фильтрации и рекурсии.
|
Цитата:
Цитата 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.
© OSzone.net 2001-