批量混合中的PowerShell - 如何在txt中查找多个不同的字符串并仅在不存在时才附加到顶部?

问题描述 投票:0回答:1

这是我学习PowerShell的尝试。没有编码/脚本方面的教育背景。仅通过阅读 StackOverflow 和 Superuser 中的不同示例来学习 Batch,尝试根据需要调整找到的片段,并进行大量试验和错误。请善待!

有几个字符串需要添加到txt文件中(不带编号):

  1. [/这/IsJust.AnExample]
  2. 这是否为真=假
  3. 这是假=

我尝试将找到的内容“转换”为可能在批处理文件中看起来可用的内容:

start "" /wait /min powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "(Get-ChildItem 'D:\Sample Path\%sample_var%\Sample file.txt' -File -recurse | Where{!(Select-String -SimpleMatch '([/This/IsJust.AnExample])|(IsThisTrue=False)|(IsThisFalse=)' -Path $_.fullname -Quiet)} | ForEach{ $Path = $_.FullName '([/This/IsJust.AnExample])|(IsThisTrue=False)|(IsThisFalse=)',(Get-Content $Path) | Set-Content $Path }"

期望:

  1. 仅当行不存在时才必须添加
  2. 该行必须添加到文件顶部
  3. 不得使用外部.ps1或.bat文件。
  4. 它需要查找多行而不是一行
  5. 它不需要 -include,因为它只在特定文件中搜索。

实际结果:

  • 它只是失败而不对txt做任何事情。

是什么原因导致它失败以及如何正确地做到这一点?关于如何将 PowerShell 转换为 Batch 的傻瓜指南的链接也很好。

备注:

  • -NoProfile -ExecutionPolicy Bypass -Command
    -NoP -Ex -By -c
    -NoP -Ex By -c
    -NoP -ep Bypass -c
    - 变化不起作用。
windows powershell batch-file hybrid
1个回答
0
投票

您在

ForEach-Object
循环中运行单独的命令,但您并不表示它们是单独的。在这里,这一点:

|ForEach{ $Path = $_.FullName '([/This/IsJust.AnExample])|(IsThisTrue=False)|(IsThisFalse=)',(Get-Content $Path) | Set-Content $Path }

如果这是一个具有良好格式的脚本,看起来会像这样:

| ForEach-Object {
    $Path = $_.FullName
    '([/This/IsJust.AnExample])|(IsThisTrue=False)|(IsThisFalse=)',(Get-Content $Path) | Set-Content $Path
  }

这是

ForEach
中的两个命令。如果您想将它们都挤在一行上,则需要一个分号来表示一个命令的结束和另一个命令的开始。因此,在那一行中,您需要在
$Path = $_.FullName
之后加一个分号,这样您的整行看起来像这样:

start "" /wait /min powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "(Get-ChildItem 'D:\Sample Path\%sample_var%\Sample file.txt' -File -recurse | Where{!(Select-String -SimpleMatch '([/This/IsJust.AnExample])|(IsThisTrue=False)|(IsThisFalse=)' -Path $_.fullname -Quiet)} | ForEach{ $Path = $_.FullName; '([/This/IsJust.AnExample])|(IsThisTrue=False)|(IsThisFalse=)',(Get-Content $Path) | Set-Content $Path }"

现在,这并不能真正实现你想要的效果,我不认为,它只会将这一行添加到文件的顶部,但它至少会让你的一行代码做一些事情。

© www.soinside.com 2019 - 2024. All rights reserved.