Советы с синтаксисом сценария powershell - PullRequest
0 голосов
/ 28 января 2020

Я пишу сценарий powershell для выполнения следующих действий:

В папке Folder > Subfolder1 > Subfolder2 имеется 30+ subfolders.zip, в которой есть еще одна подпапка с 200 файлами HRML. Я хотел бы найти ключевое слово WTSE в файлах HTML, и любые файлы, содержащие это ключевое слово, будут перемещены в другую папку.

В настоящий момент мой сценарий выглядит следующим образом:

Get-childitem C:\Users\XXXXX\Desktop\Folder\ -filter *.html -recurse | select-string 'WTSE'|foreach-object -process{move-item} C:\Users\XXXXX\Desktop\Folder2`

1 Ответ

0 голосов
/ 28 января 2020

Ты почти у цели. Проблема с деталью после ForEach-Object.

Поскольку вы не ищете строку с помощью регулярных выражений, я бы предложил добавить -SimpleMatch в командлет Select-String.

Попробуйте ниже:

$sourceFolder = 'C:\Users\XXXXX\Desktop\Folder'
$destination  = 'C:\Users\XXXXX\Desktop\Folder2'

(Get-ChildItem -Path $sourceFolder -Filter '*.html' -Recurse | Select-String -Pattern 'WTSE' -SimpleMatch) | 
    Move-Item -Destination $destination

Командлет Move-Item может принимать массив путей, а также принимать входные данные конвейера, поэтому здесь нет необходимости использовать ForEach-Object.

Примечание. Я использую скобки вокруг первой части (Get-ChildItem ... -SimpleMatch). Это предотвращает ошибку, что процесс не может открыть файл, потому что он используется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...