【问题标题】:Execute Powershell command from script path从脚本路径执行 Powershell 命令
【发布时间】:2016-01-22 02:25:53
【问题描述】:

首先,我将简要概述一下我试图实现的目标。我想浏览一系列 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 盘上所有包含单词“this text”和“TEST”的 HTML 文件。我希望能够从 Powershell 脚本所在的位置更改这些 HTML 文件,而不是从 H 驱动器?

感谢您的帮助。

谢谢

【问题讨论】:

    标签: powershell


    【解决方案1】:

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

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

    【讨论】:

    • 您好,感谢您的帮助。我有点困惑。我究竟在哪里使用此代码,并且我不必更改 PSPath 以将这些 HTML 文件重新保存到与 powershell 脚本相同的文件夹中?
    • 也许我不太了解你。让我以问题的形式问它:你想:1)将 PowerShell 脚本放在本地文件夹中,2)将文件从 H 盘复制到与脚本文件相同的文件夹中,3)操作其中的 HTML 文件本地文件夹?
    【解决方案2】:

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

    【讨论】:

    • 非常感谢您的回复。请问如何将 HTMLpath 设置为 Powershell 文件的路径?而不必在代码中指定它
    • 对不起,我认为我没有很好地解释自己。我希望能够获取脚本的执行路径,在脚本的同一文件夹中的 HTML 文件中查找和替换文本并将它们重新保存在同一文件夹中。我不想必须指定 HTMl 文件的路径,它们与脚本位于同一文件夹中。再次感谢您的帮助
    【解决方案3】:

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

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

    param($HTMLpath = $PSScriptRoot)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 2010-10-06
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多