2016-11-29 4 views
0

Im в настоящее время пытается получить сценарий, чтобы сделать следующее:Powershell - TXT поиск файлов

поиск местоположения файла и получить любой .txt, .ini, .config файл. фильтровать этот файл на вкладке пользователя. переместите все файлы в нужное место.

У меня проблема с попыткой питания в переменной и, вероятно, она очень проста, но я в настоящее время изо всех сил пытаюсь выяснить, что мне нужно сделать, не разбивая строку вручную. есть идеи?

$QQ = Read-Host -Prompt "String your searching for:" 
$QL = Read-Host -Prompt "Enter the file location you wish to search:" 
$FT = Get-ChildItem -Path "$QL" -recurse | where {$_.extension -eq ".txt"} | % {$_.fullname} 
$FI = Get-ChildItem -Path "$QL" -recurse | where {$_.extension -eq ".ini"} | % {$_.fullname} 
$FC = Get-ChildItem -Path "$QL" -recurse | where {$_.extension -eq ".config"} | % {$_.fullname} 
$FTS = Get-Content -Path "$FT" -Filter "$QQ" 
$FIS = Get-Content -Path "$FI" -Filter "$QQ" 
$FCS = Get-Content -Path "$FC" -Filter "$QQ" 
$FD = "C:\Search-$QQ" 
$FD1 = Get-ChildItem $FD 

function folder { 
    if ($FD -eq $Null) {New-Item "$FD" -ItemType directory}} 

function search{ 
    if ($FTS -ne $null){Copy-Item -Path $ft -Destination "$fd" | Write-Host "$FT" | Format-List} 
    if ($FIS -ne $null){Copy-Item -path $fi -Destination "$fd" | Write-Host "$FI" | Format-List} 
    if ($FCS -ne $null){Copy-Item -Path $fc -destination "$fd" | Write-Host "$FC" | Format-List} 
} 
folder 
search; 

Пример ошибки принимаемой является: (очевидно, проблема с его обработкой нескольких файлов в строке как один)

Get-Content: не удается найти путь «C: \ test \ Test \ 1c.config C: \ test \ Test \ 2c.config C: \ test \ Test \ 3c.config ', потому что он не существует.

+0

Ive установил его myselfjust необходимо было отказаться от котировок от $ FT, $ FI, $ FC по переменным $ FTS, $ FIS, $ FCS. –

ответ

1

сразу же я вижу, функция folder не будет работать, как свойство $FD никогда не будет нулевым, так как вы назначаете строку к нему, если вам нужно проверить, если папка существует использовать Test-Path. но в связи с вашим фактическим сценарием проблема заключается в использовании вами get-content, который пытается прочитать все содержимое ваших файлов в массив строк. из внешнего вида вы должны просто работать с массивами, возвращаемыми Get-ChildItem, и использовать Test-Path, чтобы проверить ваши пути, а не тот странный метод Get-Content, который вы используете (поскольку содержимое файлов не имеет значения, просто они существуют или нет). Вам также необходимо включить цикл, чтобы действовать на каждый элемент массива отдельно, а не пытаться работать с ними в таких группах, как вы.

+0

Справедливая точка об испытательном пути. Тем не менее я забочусь о содержимом файла, пытаясь фильтровать содержимое. –

+0

Ive исправил это так или иначе, просто нужно было отказаться от котировок от $ FT, $ FI, $ FC по переменным $ FTS, $ FIS, $ FCS. –

0

(Этот скрипт для массовых файлов прикладных программ поиска, чтобы найти такие значения, как сервер идентификаторов и паролей HARDCODED и т.д.)

Fixed код:

$QQ = Read-Host -Prompt "String your searching for:" 
$QL = Read-Host -Prompt "Enter the file location you wish to search:" 
$FT = Get-ChildItem -Path "$QL" -recurse | where {$_.extension -eq ".txt"} | % {$_.fullname} 
$FI = Get-ChildItem -Path "$QL" -recurse | where {$_.extension -eq ".ini"} | % {$_.fullname} 
$FC = Get-ChildItem -Path "$QL" -recurse | where {$_.extension -eq ".config"} | % {$_.fullname} 
$FTS = Get-Content -Path $FT -Filter "$QQ" 
$FIS = Get-Content -Path $FI -Filter "$QQ" 
$FCS = Get-Content -Path $FC -Filter "$QQ" 
$FD = "C:\Support\Search-$QQ" 
$FD1 = Test-Path $FD 

function folder { 
if ($FD1 -eq $false) {New-Item "$FD" -ItemType directory} 
} 
function search{ 
    if ($FTS -ne $null){Copy-Item -Path $ft -Destination "$fd" | Write-Host "$FT" | Format-List} 
    if ($FIS -ne $null){Copy-Item -path $fi -Destination "$fd" | Write-Host "$FI" | Format-List} 
    if ($FCS -ne $null){Copy-Item -Path $fc -destination "$fd" | Write-Host "$FC" | Format-List} 
} 

folder 
search; 
0

попробовать это

$QL = Read-Host -Prompt "Enter the file location you wish to search:" 
if (-not (Test-Path $QL)) 
{ 
    write-host "Specified path ($QL) doesnt exists " 
    return; 
} 

$QQ = Read-Host -Prompt "String your searching for:" 
$FD = "C:\Search-$QQ" 
New-Item "C:\Search-$QQ" -ItemType directory -Force | out-null 

Get-ChildItem -Path "$QL" -recurse -include "*.txt", "*.ini", "*.config" | 
    select-string -Pattern "$QQ" -SimpleMatch | 
     %{ Copy-Item -Path $_.Path -Destination "$fd" -Force ; $_.Path } 
Смежные вопросы