Я готовлю скрипт для поиска текста внутри файлов («test» и «test1» - ключевые слова в этом сценарии), и как только все файлы найдены, их следует скопировать в другое место, сохраняя структура папок.
Например:
Путь c: \ src содержит 10 файлов, 3 включают в себя слова поиска.
Эти 3 файла должны быть скопированы в c: \ dst \
Все должно быть рекурсивно для всех подкаталогов c: \ src.
Так что, если в пути c: \ src \ somefolder \ были другие файлы с такими же поисковыми словами, они должны быть скопированы в c: \ dst \ somefolder \
Вот мой код:
Write-Host ""
Write-Host "Note: Path must end with '\'"
Write-Host ""
# Var.
$sourceDir = Read-Host 'Source path'
$targetDir = Read-Host 'Destination path'
# Decl.
$tree = gci -Directory -Name -Recurse $sourceDir
# Check if $sourceDir exist
if(!(Test-Path -Path $sourceDir )){
"Source is not a valid path!" ; pause
exit 1
}
# Check (and create) $targetDir
if(!(Test-Path -Path $targetDir )){
mkdir $targetDir -Force
}
# Rebuild Tree
foreach ( $folders in $tree ) { mkdir $targetDir\$folders -Force }
# Copy Founded Files
$ftc = Get-ChildItem $sourceDir -Recurse | Select-String "test","test2" | Select Path |
foreach{
$targetFile = $targetDir + $_.FullName.SubString($sourceDir.Length);
Copy-Item $_ -destination $targetFile
}
Не могу понять, где ошибка.
Кто-нибудь знает, как я могу это решить?
Предложенная ошибка: Copy-Item: Невозможно найти устройство. Единица с именем '@ {Path = C' не существует.