从脚本路径执行Powershell命令

时间:2014-03-28 12:30:58

标签: powershell

首先,我将简要介绍一下我想要实现的目标。我想通过一系列HTML文件,替换代码,然后重新保存这些HTML文件。这一切都有效,但PS命令只会在默认的Powershell路径上的HTML文件上执行此操作(对我来说这是H驱动器)。

我希望能够有一个单独的文件夹,其中包含我的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文件。与'TEST'。我希望能够从Powershell脚本所在的位置更改这些HTML文件,而不是从H驱动器更改?

我感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:1)

使用名为$PSScriptRoot的内置变量从PowerShell脚本所在的同一文件夹中检索文件。

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

答案 1 :(得分: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"

答案 2 :(得分:0)

调用Get-ChildItem . *.html -Rec将获取当前工作目录下的所有文件。如果您在调用它时碰巧与脚本位于同一个文件夹中,我希望它可以按您的需要运行。如果您从其他路径调用脚本,例如通过设置计划任务来运行powershell.exe <path_to_script>,它可能无法获取您想要的文件。也许H:是Windows用户配置文件的根目录?

根据其他答案,使用$PSScriptRoot或将.html文件所在的路径传递给参数会很好。要合并两者,您可以向脚本添加参数并将该参数的默认值设置为$PSScriptRoot

param($HTMLpath = $PSScriptRoot)

这将允许您在必要时指定远程路径,以及(2)否则默认为保存脚本的路径。