2014-03-28 259 views
0

首先我將簡要介紹一下我試圖實現的內容。我想瀏覽一系列HTML文件,替換代碼然後重新保存這些HTML文件。這一切都能正常工作,但PS命令只會在默認Powershell路徑(對於我來說這是H驅動器)中的HTML文件執行此操作。從腳本路徑執行Powershell命令

我希望能夠有一個單獨的文件夾,其中包含我的PowerShell腳本和HTML文件,並將它們轉換爲不在H驅動器中的文件夾。

我的代碼如下:

PowerShell腳本

$HTMLfiles=get-childitem . *.html -rec 
foreach ($files in $HTMLfiles) 
{ 

(Get-Content $files.PSPath) | ForEach-Object { $_ -replace "this text", "TEST" } | Set-Content $files.PSPath 

} 

這成功地改變了包含單詞 '這段文字' 與 'TEST' 爲H驅動器上的所有HTML文件。我希望能夠從Powershell腳本所在的位置更改這些HTML文件,而不是從H驅動器?

我很感激任何幫助。

感謝

回答

0

在你的腳本,你問到Get-ChildItem cmdlet來尋找項目在當前目錄,使腳本尋找在其他目錄下的文件,你只需要指定它的Get- ChildItem:

$HTMLpath="C:\path\to\your\html\files" 
$HTMLfiles=get-childitem $HTMLpath *.html -rec 
foreach ($files in $HTMLfiles) 
{ 

(Get-Content $files.PSPath) | ForEach-Object { $_ -replace "this text", "TEST" } | Set-Content $files.PSPath 
} 

編輯: 如果你想的路徑作爲參數傳遞給你的腳本傳遞,只是做到以下幾點:

param($HTMLpath) 
$HTMLfiles=get-childitem $HTMLpath *.html -rec 
foreach ($files in $HTMLfiles) 
{ 

(Get-Content $files.PSPath) | ForEach-Object { $_ -replace "this text", "TEST" } | Set-Content $files.PSPath 
} 

然後您可以在控制檯中調用您的腳本(假設您位於腳本所在的目錄中):./myscript "C:\path\to\your\files"

+0

非常感謝您的回覆。我可以問我如何將HTML路徑設置爲Powershell文件的路徑?而不必在代碼 – user3402227

+0

中指定它對不起,我不認爲我解釋得很好。我希望能夠獲得腳本的執行路徑,查找並替換腳本的同一文件夾中的HTML文件中的文本,並將它們保存在同一文件夾中。我想要指定HTMl文件的路徑,它們與腳本位於同一個文件夾中。再次感謝您的幫助 – user3402227

1

使用名爲$PSScriptRoot的內置變量從PowerShell腳本所在的同一文件夾中檢索文件。

Get-ChildItem -Path $PSScriptRoot -Include *.HTML; 
+0

嗨,感謝您的幫助。我有點困惑。我到底在哪裏使用此代碼,並且我不得不更改PSPath以將這些HTML文件重新保存到與powershell腳本相同的文件夾中? – user3402227

+0

也許我不是很瞭解你。讓我以問題的形式提出問題:你想要:1)將PowerShell腳本放入本地文件夾中,2)將文件從H驅動器複製到與腳本文件相同的文件夾中,3)處理該文件中的HTML文件本地文件夾? –

0

調用Get-ChildItem . *.html -Rec將獲得當前的工作目錄下的所有文件。如果您在打電話時碰巧與腳本位於同一文件夾中,我希望它能夠按照您的要求工作。如果您從其他路徑調用腳本,例如通過設置一個計劃任務運行powershell.exe <path_to_script>,那麼它可能不會選取你想要的文件。也許H:是你的Windows用戶配置文件的根?

根據其他答案,使用$PSScriptRoot或傳遞.html文件駐留在參數中的路徑會很好。要結合兩種,可以將參數添加到您的腳本,並設置默認值該參數爲$PSScriptRoot

param($HTMLpath = $PSScriptRoot) 

這將(1)允許在必要時和(2),否則你指定遠程路徑默認爲保存腳本的路徑。