PowerShell的 - txt文件搜索
即时通讯目前试图让一个脚本来做到以下几点: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;
正在接收错误的一个例子是:(很明显,它处理的字符串作为一个在多个文件的问题)
获取内容:找不到路径“C: \ test \ Test \ 1c.config C:\ test \ Test \ 2c.config C:\ test \ Test \ 3c.config',因为它不存在。
马上蝙蝠我看到folder
功能将无法正常工作属性作为$FD
因为你分配一个字符串它,如果你需要检查,如果该文件夹存在使用Test-Path
永远不会为空。但与您的实际脚本相关的问题是您使用的get-content
,它试图将您的所有文件内容读取到一个字符串数组中。从它的外观你应该只是与Get-ChildItem
返回的数组,并使用Test-Path
来检查你的路径,而不是你奇怪的Get-Content
方法(因为文件的内容并不重要,只是它们是否存在或不)。您还需要合并一个循环来单独处理每个数组元素,而不是像您一样尝试对它们进行处理。
关于测试路径的公平点。不过我关心文件的内容,因此试图过滤内容。 –
无论如何我只需要将$ FT,$ FI,$ FC上的报价从$ FTS,$ FIS,$ FCS变量中删除即可。 –
(这个脚本是大规模的搜索应用程序文件找到像服务器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;
试试这个
$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 }
伊夫固定它myselfjust需要将$ FT,$ FI,$ FC上的报价从$ FTS,$ FIS,$ FCS变量中删除。 –