首页 > 解决方案 > BAT 或 Powershell For 循环通过 CSV 构建 URL

问题描述

解决了。所以我在这篇文章中的第一个问题是一个结构非常糟糕的问题,试图以非常糟糕的方式混淆专有公司信息,并且没有很好地提出这个问题。

一旦沃尔特甚至让我朝着正确的方向思考,我就解决了这个问题。下面是我遇到的第二个问题,发现 @{key=value} 语句被传递到我的 url 中,因为由于某种原因,我的脚本不喜欢 csv 文件中的标题。事后看来,也许是因为我将变量命名为与标题相同。无论如何,我只是通过使用 Get-Content 而不是 Import-CSV 来解决它。

    $aliases = Import-Csv -Path .\aliases.csv

    foreach ($alias in $aliases) {
        Write-Output ('http://www.' + $($alias) + '.mydomain.com') >> urls.txt

aliases.csv 的内容是:

    alias
    Matthew
    Mable
    Mark
    Mary

这给了我:

    http://www.@{alias=Matthew}.mydomain.com
    http://www.@{alias=Mable}.mydomain.com
    http://www.@{alias=Mark}.mydomain.com
    http://www.@{alias=Mary}.mydomain.com

成功时 urls.txt 应包含:

    http://www.Matthew.mydomain.com
    http://www.Mable.mydomain.com
    http://www.Mark.mydomain.com
    http://www.Mary.mydomain.com

注意:已编辑以阐明用例

标签: batch-processing

解决方案


在 Powershell 中

Get-Content names.txt | %{"Hello, my name is $_. How are you?"}  >> results.txt

顺便说一句,只需稍加努力,您就可以从 csv 文件中读取多个变量,并将它们全部替换为文本中的命名变量。事实证明,这在各种情况下都非常有用。

编辑以符合您的编辑

Import-csv ./aliases.csv | %{ "http://www.$($_.alias).mydomain.com"}

笔记:

  1. 一旦你习惯了它们,管道是处理几乎任何东西的流的最简单方法。

  2. % 是 Foreach-Object 的缩写(不要与 foreach 混淆)。

  3. 对于从管道中出来的每个对象,循环将执行一次。每个对象将是一个 PSCustomObject,具有一个名为 alias 的属性。

  4. $() 允许对双引号字符串中的子表达式求值。

  5. $_ 是当前对象。

  6. 在这种情况下,点将指定的对象与命名属性分开。


推荐阅读