2017-05-25 88 views
0

我有一個簡單的myscript.ps1從文件中提取的網址,從this tutorial採取:PowerShell和選擇串訪問文件 - 訪問被拒絕

$input_path = 'd:\myfolder\*' 
$output_file = 'd:\extracted_URL_addresses.txt' 
$regex = '([a-zA-Z]{3,})://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)*?' 
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file 

我運行PowerShell中以管理員身份,然後鍵入:

D:/myscript.ps1 

但對於大多數路徑內d:\myfolder我得到:

select-string : The file D:\myfolder\templates cannot be read: Access to the path 'D:\myfolder\templates' is denied. 

使用WinSCP從FTP服務器複製文件夾。我試圖去文件夾屬性和勾選「只讀」框比應用,但每次我重新輸入屬性它是「只讀」(我不知道如果這是有關的問題)。

我在Windows 10

+2

看起來像'd:\ MyFolder文件\ templates'是一個文件夾不是一個文件選擇字符串可以工作。 – LotPings

+0

您是否可以瀏覽以查看D:\ myfolder \ templates中的文件,並且如果您看到文件,您是否可以打開它們?這聽起來像是一個ACL問題。 – TheMadTechnician

+0

@TheMadTechnician是的,我可以打開和瀏覽這些文件夾沒有任何問題。 – PolGraphic

回答

0

工作要在意見擴大從@LotPings你可以通過使用-File參數從Get-ChildItem得到的只是在D:\myfolder的文件。這樣你就不會將目錄傳到Select-String

$input_path = 'd:\myfolder' 
$Files = Get-ChildItem $input_path -File | Select-Object -ExpandProperty FullName 
Foreach ($File in $Files) { 
    $output_file = 'd:\extracted_URL_addresses.txt' 
    $regex = '([a-zA-Z]{3,})://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)*?' 
    select-string -Path $file -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file 
} 
0
  • 作爲$inputautomatic variable我不會用它 - 甚至還不如一個變量名的一部分。
  • 你不需要兩個堆疊ForEach-Object使用$_.Matches.Values代替
  • 使用的路徑下的文件擴展名可能最終避免錯誤
  • 在這個網頁的副本使用folllowing腳本的作品完美,但有不少受騙者的,所以我會追加一個|Sort-Object -Unique

$FilePath = '.\*.html' 
$OutputFile = '.\extracted_URL_addresses.txt' 
$regex = '([a-zA-Z]{3,})://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)*?' 
Get-ChildItem -File $FilePath | 
    Select-String -Pattern $regex -AllMatches | 
    ForEach-Object { $_.Matches.Value } |Sort -Unique > $OutputFile