foreach (#файл в $files){ nul найти «2019» $сохранить файл (D:Export2019 $file) }

#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 — я добавил ваши исправления в приведенный выше фрагмент