首先,我将简要介绍一下我想要实现的目标。我想通过一系列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驱动器更改?
我感谢任何帮助。
由于
答案 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)否则默认为保存脚本的路径。