#powershell
#powershell
Вопрос:
.ps1 скопируйте файлы в определенные места, если в файле указан определенный текст
я пытаюсь использовать код в Powershell… У меня много xml-файлов в S:Export и я хочу скопировать файлы, содержащие текст «2019», в папку S:Export2019
Это мой код:
Start-Transcript -Path S:Export2019info.txt
$files = Get-ChildItem "S:Export"
mkdir S:Export2019
foreach ($file in $files){
>nul find "<APPDATE>2019" $file (
echo $file was found.
Save("S:Export2019$file")
)
}
ii S:Export2019 #
У меня много xml-файлов в S:Export и я хочу скопировать файлы, содержащие текст «2019», в папку S:Export2019
это не работает:
>nul find "<APPDATE>2019" $file (
echo $file was found.
Save("S:Export2019$file")
Ответ №1:
Я не совсем уверен, правильно ли я понял ваш вопрос. Следующий скрипт будет перебирать все XML-файлы в определенном каталоге и искать текст 2019
. Если этот текст есть в файле, он будет скопирован в другой каталог
Пожалуйста, имейте в виду, что этот сценарий является очень грубым подходом «грубой силы», но он должен дать вам основу для работы
$source_dir = ".S_Export2019" # Directory where the XML files are
$target_dir = ".Target_Directory" # Directory where "2019" files will be copied to
# Loop through the directory $source_dir and get the fullpath of all XML-files
foreach ($file in (Get-ChildItem "$source_dir*.xml")) {
# Save the content of the XML file
$file_content = Get-Content $file -raw
# Check if the XML file contains "2019"
if ($file_content -match "2019") {
Write-Host "$file contains '2019'"
Copy-Item $file $target_dir # Copy file to $target_dir
}
}
Редактировать
Спасибо @LotPings за исправление — я добавил -raw
параметр в Get-Content
, а также изменил if
сравнение на использование -match
вместо прежнего -contains
Комментарии:
1. вы правильно поняли, код в порядке, на мой взгляд, но он не копирует файлы … 🙁
2. Добавьте параметр -raw в
Get-Content
и измените-contains
=>-match
3. Спасибо @LotPings — я добавил ваши исправления в приведенный выше фрагмент