Как найти строку в нескольких файлах и вернуть имена файлов в Powershell?
Я начал изучать PowerShell пару дней назад, и я не смог найти в Google ничего, что могло бы сделать то, что мне нужно, поэтому, пожалуйста, ответьте на мой вопрос.
Меня попросили заменить некоторые текстовые строки на несколько файлов. Я не обязательно знаю расширение возможных целевых файлов и не знаю, где они находятся. До сих пор мне удалось рекурсивно просмотреть каталог ( get-ChildItem -recurse ) и найти искомую строку с помощью get-content и select-string:
Проблема в том, что я вижу вхождения искомого текста, но я не знаю, как сказать PS, чтобы он возвращал путь и имя для каждого соответствующего файла.
Как я могу получить имя и расположение файлов, которые содержат искомое выражение?
Возможно, отредактируйте вопрос, чтобы он был более общим. Кажется, что ответ на этот вопрос не имеет ничего общего с JBoss или вашим приложением, над которым вы работаете .
Я только заметил ваш комментарий и отредактировал мой вопрос . 2 года спустя! лучше поздно, чем никогда .. 🙂
Это должно дать расположение файлов, которые содержат ваш шаблон:
Что делать, если вы также хотите переместить эти файлы? . Я получаю сообщение об ошибке, когда не могу присоединиться к | Move-Item до конца этого.
Get-ChildItem -Recurse | Select-String «dummy» -List | Select Path возвращает только первое совпадение для каждого файла, поэтому может быть немного более эффективным и избавляет от необходимости группировать их
Стоит заметить, что вы можете фильтровать только файлы определенного типа, скажем, txt файлы, если вы используете Get-ChildItem -Recurse -Filter *.txt вместо этого
@ rud3y Я настоятельно рекомендую вам записать это в сценарии с использованием foreach цикла, если вы делаете такие большие операции. Это становится очень запутанным, когда вы пытаетесь сделать все это в одной строке, и очень легко сделать большую ошибку. Я говорю из опыта
Здесь есть множество точных ответов, но здесь приведен наиболее краткий код для нескольких различных вариантов. Для каждого варианта в верхней строке показан полный синтаксис, а в нижней — краткий синтаксис.
Пункт (2) является более сжатой формой ответов от Jon Z и manojlds, тогда как пункт (1) эквивалентен ответам от vikas368 и buygrush.
Список объектов FileInfo для всех файлов, содержащих шаблон:
Список имен файлов для всех файлов, содержащих шаблон:
Список объектов FileInfo для всех файлов, не содержащих шаблон:
Список имен файлов для всех файлов, не содержащих шаблон:
Кроме того, если вы просто ищете файлы, которые содержат шаблон в любом месте, вы можете отказаться от поиска первого экземпляра, используя -List параметр Select-String
Я хотел бы, чтобы ФП задал небольшую вариацию вопроса, чтобы это был АА. # 1 был очень полезен, и очевидно, что @Mikhael Sorens засовывает PS!
Это отобразит путь, имя файла и найденную им строку содержимого, которые соответствуют шаблону.
Скачать по HTTP или HTTPS
DownloadFile
$download_url = «http://download_ahyware/file1.zip»
$local_path = «C:Downloadsfile1.zip»
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile($download_url, $local_path)
* в данном примере мы скачаем файл http://download_ahyware/file1.zip и разместим его на компьютере по пути C:Downloadsfile1.zip.
Invoke-WebRequest
Данный командлет предназначен для загрузки содержимого html документа. Также с его помощью можно скачивать файлы:
Invoke-WebRequest -URI https://www.dmosk.ru/files/winsetupfromusb.zip -outfile c:tempwinsetupfromusb.zip
* где URI — путь-источник (что скачиваем); outfile — путь-назначение (куда скачиваем).
Для удобства можно использовать команду wget — по сути, это алиас на Invoke-WebRequest.
2 ответа
Не так уж плохо . Я не могу придумать способ, не рекурсивный все диски, подобные этому.
См. эту страницу для получения информации о поиске индекса.
Здесь будут перечислены все файлы ZIP в порядке уменьшения размера по каталогу на всех доступных дисках:
Или найдите указанный список Приводов /Акций (например, C :, D: и SERVER1 SHARE1 . )
Перемещение файлов через PowerShell на удаленные компьютеры
В настоящее время я пытаюсь переместить файл из локального адресата на удаленный компьютер в сети. Я надеюсь распространить это на нескольких пользователей, но в то же время я пытаюсь переместить только один файл на один компьютер.
Текущий скрипт, который я использую, ниже
Когда я запускаю это, я получаю следующую ошибку
Однако я попытался удалить -Credential и $ getcred, но я получаю
Это проблема с использованием New-PSDrive или есть другая команда, которая будет работать лучше?
1 ответ 1
Установите исходную переменную, например, $source=’\server1folder’ и исключите из нее звездочку ( * ), как в приведенном примере. Вам не нужно экранировать символы обратной косой черты ( ) с дополнительной обратной косой чертой, поэтому пропустите дополнительные обратные косые черты в путях UNC.
Рассмотрите возможность использования
Примечание. Используйте -Filter для шаблона строки шаблона и т.д.
Похожие вопросы
C# Bunifu — Как я могу использовать / вызывать любой тип элемента управления Bunifu в настраиваемом классе?
Ошибка: «Доступ запрещен для пользователя« root »@« localhost »(с использованием пароля: ДА)» и «НЕТ» оба в Windows 10. Как выполнить вход в систему с правами root?