这是我学习PowerShell的尝试。没有编码/脚本方面的教育背景。仅通过阅读 StackOverflow 和 Superuser 中的不同示例来学习 Batch,尝试根据需要调整找到的片段,并进行大量试验和错误。请善待!
有几个字符串需要添加到txt文件中(不带编号):
我尝试将找到的内容“转换”为可能在批处理文件中看起来可用的内容:
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 }"
期望:
实际结果:
是什么原因导致它失败以及如何正确地做到这一点?关于如何将 PowerShell 转换为 Batch 的傻瓜指南的链接也很好。
备注:
-NoProfile -ExecutionPolicy Bypass -Command
、-NoP -Ex -By -c
、-NoP -Ex By -c
、-NoP -ep Bypass -c
- 变化不起作用。您在
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 }"
现在,这并不能真正实现你想要的效果,我不认为,它只会将这一行添加到文件的顶部,但它至少会让你的一行代码做一些事情。