2016-11-29 6 views
0

イムは、現在、次の操作を実行するためのスクリプトを取得しよう: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-コンテンツを:パス「Cを見つけることができません。 \ test \ Test \ 1c.config C:\ test \ Test \ 2c.config C:\ test \ Test \ 3c.config 'が存在しないためです。右バットオフ

+0

アイブ氏はmyselfjustそれを修正してみてください$ FTS、$ FIS、$ FCS変数の$ FT、$ FI、$ FCの引用符を削除する必要がありました。 –

答えて

1

私はfolder機能を使用すると、フォルダがTest-Pathを使用して存在しているかどうかを確認する必要がある場合は、それに文字列を割り当てるため、nullになることはありません$FDとしての特性を動作しません参照してください。あなたの実際のスクリプトとの関係では、問題はget-contentを使用して、ファイルのすべての内容を文字列の配列に読み込もうとしていることです。その外観から、Get-ChildItemによって返された配列を使って作業し、Test-Pathを使用して、あなたのパスが奇妙なGet-Contentメソッドではなくて(ファイルの内容は問題ではなく、存在するかどうかだけではなく)チェックしてください)。また、あなたのようなグループで作業するのではなく、個々の配列要素を個別に処理するループを組み込む必要があります。

+0

テストパスに関する公平なポイント。私はしかし、ファイルの内容を気にするので、コンテンツをフィルタリングしようとしています。 –

+0

Iveは$ FT、$ FIS、$ FCS変数の$ FT、$ FI、$ FCから引用符を削除するだけで済むように修正しました。 –

0

(このスクリプトなどハードコードサーバIDのやパスワードなどの値を見つけるために、質量検索アプリケーションファイルにある)

固定コード:

$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 } 
関連する問題