簡體   English   中英

從腳本路徑執行Powershell命令

[英]Execute Powershell command from script path

首先,我將簡要概述我正在努力實現的目標。 我想瀏覽一系列HTML文件,替換代碼,然后重新保存這些HTML文件。 所有這些都有效,但是PS命令只會在默認Powershell路徑(對我來說這是H驅動器)上的HTML文件上執行此操作。

我希望能夠有一個單獨的文件夾,其中包含我的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

}

這樣可以成功更改H驅動器上所有包含“此文本”和“測試”字樣的HTML文件。 我希望能夠從Powershell腳本所在的位置而不是從H驅動器更改這些HTML文件?

感謝您的幫助。

謝謝

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

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

在腳本中,您要求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"

調用Get-ChildItem . *.html -Rec Get-ChildItem . *.html -Rec將獲取當前工作目錄下的所有文件。 如果您在調用腳本時恰好與腳本位於同一文件夾中,那么我希望它可以根據需要運行。 如果您從其他路徑調用腳本,例如通過設置計划任務以運行powershell.exe <path_to_script>則它可能無法獲取您想要的文件。 也許H:是Windows用戶配置文件的根嗎?

按照其他答案,使用$PSScriptRoot或傳遞.html文件位於參數中的路徑會很好。 要將兩者結合起來,可以在腳本中添加一個參數,並將該參數的默認值設置為$PSScriptRoot

param($HTMLpath = $PSScriptRoot)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM